【发布时间】:2011-07-19 06:08:53
【问题描述】:
我想合并两个列表。如果我有以下两个列表:{a,b,c,d} 和 {1,2,3,4} 我需要做什么才能获得{{a,1}, {b,2}, {c,3}, {d,4}}?
【问题讨论】:
标签: list wolfram-mathematica tuples
我想合并两个列表。如果我有以下两个列表:{a,b,c,d} 和 {1,2,3,4} 我需要做什么才能获得{{a,1}, {b,2}, {c,3}, {d,4}}?
【问题讨论】:
标签: list wolfram-mathematica tuples
如果 a、b、c、d 本身也是列表,请使用以下内容:
MapThread[Flatten[{#1[[All]],#2}]&,{l1,l2}]//TableForm
【讨论】:
这是一个很好的问题。我一直认为有一种默认的方法可以用 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}]
【讨论】:
listA={a,b,c,d};
listB=[1,2,3,4};
table=Transpose@{# & @@@ listA, # & @@@ listB}
【讨论】:
如果您有包含矩阵列的列表:
l = Table[Subscript[g, Sequence[j, i]], {i, 5}, {j, 5}]
转置会给你行:
Transpose@l // MatrixForm
【讨论】:
一个深奥的方法是 Flatten,它(来自 Flatten 的帮助部分)还允许对“不规则”数组进行转置。
Flatten[ {{a, b, c, d}, {1, 2, 3, 4, 5}}, {{2}, {1}}]
输出[6]= {{a, 1}, {b, 2}, {c, 3}, {d, 4}, {5}}
【讨论】:
Thread[List[{a, b, c, d}, {1, 2, 3, 4}]] 未被提及
transpose 选项保留我的答案,因为这正是我想要的。然而,这是一个更通用的解决方案,显然可以获得 +1
Flatten。是我还是描述(Flatten[list,{{s11,s12,...},{s21,s22,...},...}] flattens list by combining all levels sij to make each level i in the result.)非常难以理解?在开始理解之前,我花了几分钟的时间凝视。
Partition[Riffle[{a, b, c, d}, {1, 2, 3, 4}],2] 也没有被提及 ;-)
这是一种方法:
Transpose[{{a, b, c, d}, {1, 2, 3, 4}}]
【讨论】:
一种可能的解决方案是
MapThread[List,{{a,b,c,d},{1,2,3,4}}]
【讨论】: