\documentclass{article}
\usepackage{expl3}
\begin{document}
\ExplSyntaxOn
\seq_new:N \l_row_seq
\newcommand{\titlerow}[1]{ % 失敗パターン1
\seq_set_split:Nnn \l_row_seq {&} {#1}
\seq_pop:NN \l_row_seq \i % 先頭要素を \i に
\textbf{\i} % 先頭のみ & なしで出力
\seq_map_variable:NNn \l_row_seq \j { & \textbf{\j} } % NG: \j が変数でなくなる
}
\newcommand{\TITLEROW}[1]{ % 失敗パターン2
\seq_set_split:Nnn \l_row_seq {&} {#1}
\seq_pop_right:NN \l_row_seq \i % 末尾要素を \i に退避
\seq_map_variable:NNn \l_row_seq \j { \textbf{\j} & }
\textbf{\i} % NG: \i が変数でなくなる
}
\ExplSyntaxOff
\begin{tabular}{|l|l|l|l|l|l|l|}
my goal & \textbf{1} & \textbf{2} & \textbf{3} & \textbf{4} & \textbf{5} \\
titlerow & \titlerow{1 & 2 & 3 & 4 & 5} \\
TITLEROW & \TITLEROW{1 & 2 & 3 & 4 & 5} \\
\end{tabular}
\end{document}
\usepackage{expl3}
\begin{document}
\ExplSyntaxOn
\seq_new:N \l_row_seq
\newcommand{\titlerow}[1]{ % 失敗パターン1
\seq_set_split:Nnn \l_row_seq {&} {#1}
\seq_pop:NN \l_row_seq \i % 先頭要素を \i に
\textbf{\i} % 先頭のみ & なしで出力
\seq_map_variable:NNn \l_row_seq \j { & \textbf{\j} } % NG: \j が変数でなくなる
}
\newcommand{\TITLEROW}[1]{ % 失敗パターン2
\seq_set_split:Nnn \l_row_seq {&} {#1}
\seq_pop_right:NN \l_row_seq \i % 末尾要素を \i に退避
\seq_map_variable:NNn \l_row_seq \j { \textbf{\j} & }
\textbf{\i} % NG: \i が変数でなくなる
}
\ExplSyntaxOff
\begin{tabular}{|l|l|l|l|l|l|l|}
my goal & \textbf{1} & \textbf{2} & \textbf{3} & \textbf{4} & \textbf{5} \\
titlerow & \titlerow{1 & 2 & 3 & 4 & 5} \\
TITLEROW & \TITLEROW{1 & 2 & 3 & 4 & 5} \\
\end{tabular}
\end{document}
\j や \i が、& の後ろにくると変数の効力をなくして、ドットなしの i や j の文字に戻ってしまいます。& を別の文字に置き換えると、望み通り、\textbf{5} のようになります。どうしたら & の副作用(?)を打ち消せるでしょうか。
TeXLive 2017 / 2020 の platex / pdflatex いずれも同じ動作です。