Here is a proposal, without \x and so on, because grouping doesn't seem possible in order to avoid (like \foreach does) clobbering existing commands.
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\definelist}{mm}
{
\clist_clear_new:c { l_ijm_list_#1_clist }
\clist_set:cn { l_ijm_list_#1_clist } { #2 }
}
\NewDocumentCommand{\assign}{mmm}
{% #1 = list name, #2 = template, #3 = item number
\ijm_list_assign:nnn { #1 } { #2 } { #3 }
}
\NewExpandableDocumentCommand{\get}{m}
{
\prop_item:Nn \l__ijm_list_assign_prop { #1 }
}
\seq_new:N \l__ijm_list_template_seq
\seq_new:N \l__ijm_list_item_seq
\prop_new:N \l__ijm_list_assign_prop
\cs_generate_variant:Nn \seq_set_split:Nnn { Nnx }
\cs_new_protected:Nn \ijm_list_assign:nnn
{
\seq_set_split:Nnn \l__ijm_list_template_seq { / } { #2 }
\seq_set_split:Nnx \l__ijm_list_item_seq { / }
{
\clist_item:cn { l_ijm_list_#1_clist } { #3 }
}
\prop_clear:N \l__ijm_list_assign_prop
\seq_mapthread_function:NNN
\l__ijm_list_template_seq
\l__ijm_list_item_seq
\__ijm_list_assign:nn
}
\cs_new_protected:Nn \__ijm_list_assign:nn
{
\prop_put:Nnn \l__ijm_list_assign_prop { #1 } { #2 }
}
\ExplSyntaxOff
\begin{document}
\definelist{listA}{1/a/A, 2/b/B, 3/c/C}
\assign{listA}{x/y/z}{1}
\get{x}\par
\get{y}\par
\get{z}\par
\assign{listA}{x/y/z}{2}
\get{x}\par
\get{y}\par
\get{z}\par
\end{document}
You define a list and then you can \assign letters (or, more generally, strings) to the items, see the example. An item is produced with \get{<letter>}.

A different approach. Lists are defined as before (but you can change the delimiter). Instead of assigning symbolic names, you can access items in “matrix” form, that is
\get{<item number>}[<subitem number>]{<list name>}
The second argument is optional; if omitted, the whole item is returned.
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\definelist}{O{/}mm}
{% #1 = divider (optional), #2 = name, #3 = items
\seq_clear_new:c { l_ijm_list_#2_seq }
\seq_set_from_clist:Nn \l__ijm_list_tempa_seq { #3 }
\seq_map_inline:Nn \l__ijm_list_tempa_seq
{
\seq_set_split:Nnn \l__ijm_list_tempb_seq { #1 } { ##1 }
\tl_clear:N \l__ijm_list_tempa_tl
\seq_map_inline:Nn \l__ijm_list_tempb_seq
{
\tl_put_right:Nn \l__ijm_list_tempa_tl { {####1} }
}
\seq_put_right:cV { l_ijm_list_#2_seq } \l__ijm_list_tempa_tl
}
}
\NewExpandableDocumentCommand{\get}{mom}
{
\IfNoValueTF { #2 }
{
\seq_item:cn { l_ijm_list_#3_seq } { #1 }
}
{
\tl_item:fn { \seq_item:cn { l_ijm_list_#3_seq } { #1 } } { #2 }
}
}
\seq_new:N \l__ijm_list_tempa_seq
\seq_new:N \l__ijm_list_tempb_seq
\tl_new:N \l__ijm_list_tempa_tl
\cs_generate_variant:Nn \tl_item:nn { f }
\ExplSyntaxOff
\begin{document}
\definelist{listA}{1/a/A, 2/b/B, 3/c/C}
\get{1}[1]{listA}\par
\get{1}[2]{listA}\par
\get{1}[3]{listA}\par
\get{2}[1]{listA}\par
\get{2}[2]{listA}\par
\get{2}[3]{listA}\par
\get{3}{listA}
\end{document}

\xetc. get defined globally. Since\xis such a common name, I'd refrain from doing that. (No, there is no problem in using\xin a plot of atikzpicture, say, but still.) Given that you say you want to use it for longer lists: are you aware of the pgfplotstable? To me it seems you could use it here together with\ReadOutElementfrom here (this is not the first macro of this sort on this site). – Oct 13 '18 at 00:24