对列表按顺序创建元组

时间:2011-03-20 19:22:33

标签: list wolfram-mathematica tuples

我想结合两个列表。如果我有以下两个列表:{a,b,c,d}{1,2,3,4}我需要做什么才能获得{{a,1}, {b,2}, {c,3}, {d,4}}

7 个答案:

答案 0 :(得分:35)

这是一种方式:

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

答案 1 :(得分:17)

一种深奥的方法是Flatten,它(从Flatten的帮助部分)也允许转置一个'参差不齐'的数组。

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

Out [6] = {{a,1},{b,2},{c,3},{d,4},{5}}

答案 2 :(得分:11)

一种可能的解决方案是

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

答案 3 :(得分:2)

如果列表中包含矩阵列:

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

转置将为您提供行:

Transpose@l // MatrixForm

答案 4 :(得分:1)

listA={a,b,c,d};
listB=[1,2,3,4};
table=Transpose@{# & @@@ listA, # & @@@ listB}

答案 5 :(得分:1)

如果a,b,c,d本身也是列表,请使用以下内容:

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

答案 6 :(得分:0)

这是一个很好的问题。我已经开始认为有一种默认的方法来使用Table,但不是这样。下面的答案非常直观,可以很容易地推广到其他类似的情况。

<table>

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

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