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$
    – Jason B.
    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$
    – Kuba
    Apr 26, 2016 at 21:01
  • $\begingroup$ Thanks! I'm really looking forward to it :-) $\endgroup$
    – Jason B.
    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$
    – kglr
    Apr 26, 2016 at 21:25
  • $\begingroup$ Yes enjoyed this one with no words $\endgroup$
    – SPIL
    Apr 29, 2016 at 8:54
  • $\begingroup$ It reminds me of those answers you see in code golf competitions. $\endgroup$
    – QuantumDot
    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$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.