2011-03-20 121 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