10
$\begingroup$
listA = {{a1, a2, a3, a4, a5, a6}, {b1, b2, b3, b4, b5, b6}, {c1, c2, c3, c4, c5, c6}, {d1, d2, d3, d4, d5, d6}, {e1, e2, e3, e4, e5, e6}, {f1, f2, f3, f4, f5, f6}} listB = {{{n1, p1}, {n2, p2}, {n3, p3}, {n4, p4}, {n5, p5}, {n6, p6}}, {{q1, r1}, {q2, r2}, {q3, r3}, {q4, r4}, {q5, r5}, {q6, r6}}, {{s1, t1}, {s2, t2}, {s3, t3}, {s4, t4}, {s5, t5}, {s6, t6}}, {{u1, v1}, {u2, v2}, {u3, v3}, {u4, v4}, {u5, v5}, {u6, v6}}, {{x1, w1}, {x2, w2}, {x3, w3}, {x4, w4}, {x5, w5}, {x6, w6}}, {{y1, z1}, {y2, z2}, {y3, z3}, {y4, z4}, {y5, z5}, {y6, z6}} } 

I need to obtain list in the form:

{{{n1, p1, a1}, {n2, p2, a2}, {n3, p3, a3}, {n4, p4, a4}, {n5, p5, a5}, {n6, p6, a6}}, {{q1, r1, b1}, {q2, r2, b2}, {q3, r3, b3}, {q4, r4, b4}, {q5, r5, b5}, {q6, r6, b6}}, {{s1, t1, c1}, {s2, t2, c2}, {s3, t3, c3}, {s4, t4,c4}, {s5, t5, c5 }, {s6, t6, c6}}, .......etc...........{{y1, z1, f1}, {y2, z2, f2}, {y3, z3, f3}, {y4, z4, f4}, {y5, z5, f5}, {y6, z6, f6}}} 

Any ideas how to do this generically - for a list of any number of rows and columns?

$\endgroup$
1

6 Answers 6

14
$\begingroup$
MapThread[Append, {listB, listA}, 2] 

or

Join[ listB, Map[List, listA, {-1}], 3 ] 
{{{n1, p1, a1}, {n2, p2, a2}, {n3, p3, a3}, {n4, p4, a4}, {n5, p5, a5}, {n6, p6, a6}}, {{q1, r1, b1}, {q2, r2, b2}, {q3, r3, b3}, {q4, r4, b4}, {q5, r5, b5}, {q6, r6, b6}}, {{s1, t1, c1}, {s2, t2, c2}, {s3, t3, c3}, {s4, t4, c4}, {s5, t5, c5}, {s6, t6, c6}}, {{u1, v1, d1}, {u2, v2, d2}, {u3, v3, d3}, {u4, v4, d4}, {u5, v5, d5}, {u6, v6, d6}}, {{x1, w1, e1}, {x2, w2, e2}, {x3, w3, e3}, {x4, w4, e4}, {x5, w5, e5}, {x6, w6, e6}}, {{y1, z1, f1}, {y2, z2, f2}, {y3, z3, f3}, {y4, z4, f4}, {y5, z5, f5}, {y6, z6, f6}}} 
$\endgroup$
3
  • $\begingroup$ When I saw this I deleted my answer, I'm new to understanding MapThread or MapIndexed, and this is clearly what it is meant for. But then I undeleted because, well, I feed off of imaginary internet points. $\endgroup$ Commented Apr 26, 2016 at 18:31
  • $\begingroup$ @JasonB it's convenient and short I always liked such solutions. But you never know if short solution won't unpack an array or something, resulting in a worse performance. At least I won't know because I'm not able to track all those things :) I would stop using MMA long time ago but those imaginary points kept me rolling, hate that now :). p.s. Congratulations for your new job :) $\endgroup$ Commented Apr 26, 2016 at 21:01
  • $\begingroup$ Thanks! I'm really looking forward to it :-) $\endgroup$ Commented Apr 27, 2016 at 10:04
7
$\begingroup$
ArrayReshape[Flatten[{##}, {2, 3}], Dimensions[#] + {0, 0, 1}] &[listB, listA] 

Mathematica graphics

$\endgroup$
6
$\begingroup$
Flatten /@ Thread[{#1, #2}] & @@@ Transpose[{listB, listA}] (* {{{n1, p1, a1}, {n2, p2, a2}, {n3, p3, a3}, {n4, p4, a4}, {n5, p5, a5}, {n6, p6, a6}}, {{q1, r1, b1}, {q2, r2, b2}, {q3, r3, b3}, {q4, r4, b4}, {q5, r5, b5}, {q6, r6, b6}}, {{s1, t1, c1}, {s2, t2, c2}, {s3, t3, c3}, {s4, t4, c4}, {s5, t5, c5}, {s6, t6, c6}}, {{u1, v1, d1}, {u2, v2, d2}, {u3, v3, d3}, {u4, v4, d4}, {u5, v5, d5}, {u6, v6, d6}}, {{x1, w1, e1}, {x2, w2, e2}, {x3, w3, e3}, {x4, w4, e4}, {x5, w5, e5}, {x6, w6, e6}}, {{y1, z1, f1}, {y2, z2, f2}, {y3, z3, f3}, {y4, z4, f4}, {y5, z5, f5}, {y6, z6, f6}}} *) 
$\endgroup$
3
$\begingroup$
☺ = {## & @@ #, #2} & @@@ # & /@ (# & /@ ({##} &@##)) &; ☺[listB, listA] 

Mathematica graphics

$\endgroup$
3
  • $\begingroup$ ... yet another member of the look ma no letters! family:) $\endgroup$ Commented Apr 26, 2016 at 21:25
  • $\begingroup$ Yes enjoyed this one with no words $\endgroup$ Commented Apr 29, 2016 at 8:54
  • $\begingroup$ It reminds me of those answers you see in code golf competitions. $\endgroup$ Commented May 4, 2016 at 10:26
3
$\begingroup$

There are good methods already posted so instead of pragmatic I shall aim for unusual.

mkpull[x_] := Module[{i = 1}, x[[i++]] &] pull = mkpull @ Flatten @ listA; PadRight[listB, {Automatic, Automatic, 3}, Unevaluated @ pull[]] 

Please don't actually use this. ;^)

$\endgroup$
1
$\begingroup$

For people who find difficult to work with more than 2 dimensions at a time:

Join[ listB[[#]], Transpose[ {listA[[#]]} ], 2 ] & /@ Range[Length[listB]] 

or even more pedestrian using Table

Table[ Join[listB[[i]], Transpose[ {listA[[i]]} ], 2], {i, Length[listB]}] 
$\endgroup$

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.