The first approach is implemented in Macro that takes a variable number of arguments, and creates a table with one row per argument. Be sure to read all the comments there. In particular, this is possibly not a great markup style.
The second approach is easy to implement with expl3 (you don't even need to specify the number of elements), for instance like this:
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\seq_new:N \l__ryanj_tmp_seq
\cs_new_protected:Npn \ryanj_output_items:n #1
{
\seq_set_from_clist:Nn \l__ryanj_tmp_seq {#1}
\seq_use:Nn \l__ryanj_tmp_seq { \item }
}
\NewDocumentCommand \mystrangeitemize { m }
{
\begin{itemize}
\item
\ryanj_output_items:n {#1}
\end{itemize}
}
\ExplSyntaxOff
\begin{document}
\mystrangeitemize{First item, Second item, Third item,
{Item, containing, commas.}}
\end{document}
\mystrangeitemize could also be implemented this way:
\NewDocumentCommand \mystrangeitemize { m }
{
\begin{itemize}
\ryanj_output_items:n { {}, #1 }
\end{itemize}
}
(the added empty item causes the first \item command to be output).
In both cases, if you want to be able to declare items containing multiple paragraphs (\par tokens must then be acceptable in the argument of \mystrangeitemize), replace m with +m in \NewDocumentCommand \mystrangeitemize { m }.

etoolbox's \docsvlist can also be used for this purpose, and you may also possibly see someone post a solution based on listofitems. :-)
itemizeif existed is so deliberated designed ... (clear and easy to use) – Zarko Aug 08 '19 at 08:51