Consider the following case:
list1 = {q, r, s};
list2 = {{a, 2}, {b, 3}, {c, 1, f}};
Inner[{#1, #2} &, list1, list2, List]
(* Out[] := {{q, {a, 2}}, {r, {b, 3}}, {s, {c, 1, f}}} *)
However, if the last element of list2 has Length 2:
list1 = {q, r, s};
list2 = {{a, 2}, {b, 3}, {c, 1}};
Inner[{#1, #2} &, list1, list2, List]
(* Out[] := {{{q, a}, {r, b}, {s, c}}, {{q, 2}, {r, 3}, {s, 1}}} *)
I would have expected (and wanted) a result like:
(* Out[] := {{q, {a, 2}}, {r, {b, 3}}, {s, {c, 1}}} *)
So,
- Why does this
Inneroperation change if thelist2entries are all of the same length? - How can I generate an output like the expected result?
Edit I came up with a potential answer to question 2:
Partition[Riffle[list1, list2], 2]
Out[] := {{q, {a, 2}}, {r, {b, 3}}, {s, {c, 1}}}
but this seems somehow too-complicated.

Inner[]in your second case is just being consistent with the behavior ofDot[]; contrast with{q, r, s}.{{a, 2}, {b, 3}, {c, 1}}. – J. M.'s missing motivation Aug 08 '12 at 16:08