2011-03-20 84 views

回答

33

这里有一种方法:

Transpose[{{a, b, c, d}, {1, 2, 3, 4}}] 
10

一个可能的解决方案是

MapThread[List,{{a,b,c,d},{1,2,3,4}}] 
+1

如果一个人要做些什么对于创建的对,这个('MapThread')通常比'Transpose'后面的'Apply'更有效率。 – 2011-03-21 14:42:34

2

如果你有一个矩阵的列列表:

l = Table[Subscript[g, Sequence[j, i]], {i, 5}, {j, 5}] 

移调会给你行:

[email protected] // MatrixForm 
15

一个深奥的方法是Flatten,它(来自Flatten的帮助部分)也允许转置一个'衣衫褴褛'的数组。

Flatten[ {{a, b, c, d}, {1, 2, 3, 4, 5}}, {{2}, {1}}] 

缺货[6] = {{A,1},{B,2},{C,3},{d,4},{5}}

+0

+1,我不知道'Flatten'可以做到这一点。 – rcollyer 2011-03-21 00:41:33

+0

@rcollyer是的,我写了自己的功能来做到这一点,只是后来发现它一直在那里。 – 2011-03-21 14:40:22

+3

'Thread [List [{a,b,c,d},{1,2,3,4}]]'没有被提及 – tomd 2011-03-21 16:36:32

0

这是一个很好的问题。我被卡住了,认为有一种默认的方式可以用Table来做到这一点,但并非如此。下面的答案相当直观,可以很容易地推广到其他类似的情况。

l1 = {a,b,c,d}; 
l2 = {1,2,3,4}; 
pairs = Table[{l1[[i]], l2[[i]]}, {i, 1, Length[l1]}] 

MapThread也做这种事情。这不像Howard的MapThread解决方案那么优雅,但在某种意义上也更具可读性。看看MapThread文档。该函数被定义的内联(纯函数):

pairs = MapThread[{#1, #2} &, {l1, l2}] 
1

如果A,B,C,D本身也列表中,使用下列:

MapThread[Flatten[{#1[[All]],#2}]&,{l1,l2}]//TableForm