web-dev-qa-db-ja.com

順番にタプルを作成するためのペアリスト

2つのリストを組み合わせたいのですが。次の2つのリストがある場合:{a,b,c,d}および{1,2,3,4}取得するために何をする必要がありますか{{a,1}, {b,2}, {c,3}, {d,4}}

29
Martijn

これが1つの方法です:

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

難解なメソッドは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}}

17
tomd

考えられる解決策の1つは

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

行列の列を持つリストがある場合:

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

転置はあなたに行を与えるでしょう:

Transpose@l // MatrixForm
2
Dr. belisarius
listA={a,b,c,d};
listB=[1,2,3,4};
table=Transpose@{# & @@@ listA, # & @@@ listB}
1
Santi

A、b、c、d自体もリストされている場合は、以下を使用します。

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

1
Frank

これは素晴らしい質問です。 Tableでこれを行うデフォルトの方法があると思って行き詰まりましたが、そうではありませんでした。以下の答えはかなり直感的であり、他の同様の状況に簡単に一般化することができます。

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

MapThreadはこの種のことも行います。これは、ハワードのMapThreadソリューションほどエレガントではありませんが、ある意味で読みやすくなっています。 MapThreadのドキュメントをご覧ください。関数はインラインで定義されます(純粋関数):

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