web-dev-qa-db-fra.com

paires de listes pour créer des n-uplets dans l'ordre

J'aimerais combiner deux listes. Si j'ai les deux listes suivantes: {a,b,c,d} et {1,2,3,4}, que dois-je faire pour obtenir {{a,1}, {b,2}, {c,3}, {d,4}}?

28
Martijn

Voici un moyen:

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

Une méthode ésotérique est Flatten, qui (à partir de la section d'aide sur Aplatir) permet également la transposition d'un tableau 'en lambeaux'.

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

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

16
tomd

Une solution possible est

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

Si vous avez des listes avec les colonnes d'une matrice:

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

Transposer vous donnera les lignes:

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

Dans le cas où a, b, c, d sont eux-mêmes une liste, utilisez ce qui suit:

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

1
Frank

C'est une excellente question. J'étais coincé en pensant qu'il y avait un moyen par défaut de faire cela avec Table, mais ce n'est pas le cas. Les réponses ci-dessous sont assez intuitives et peuvent être facilement généralisées à d'autres situations similaires.

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

MapThread fait ce genre de chose aussi. C’est moins élégant que la solution MapThread de Howard, mais aussi plus lisible dans un certain sens. Regardez les documents MapThread. La fonction est définie inline (fonction pure):

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