Duplicate possible:
ne fonction Transpose/Unzip en Python
J'ai une liste de tuples, où je veux décompresser cette liste en deux listes indépendantes. Je cherche une opération standardisée en Python.
>>> l = [(1,2), (3,4), (8,9)]
>>> f_xxx (l)
[ [1, 3, 8], [2, 4, 9] ]
Je cherche un moyen succinct et pythonique pour y parvenir.
En gros, je recherche l’opération inverse de la fonction Zip()
.
Utilisez Zip(*list)
:
>>> l = [(1,2), (3,4), (8,9)]
>>> list(Zip(*l))
[(1, 3, 8), (2, 4, 9)]
La Zip()
fonction associe les éléments de toutes les entrées, en commençant par les premières valeurs, puis les secondes, etc. En utilisant *l
you appliquez tous les n-uplets dans l
comme arguments séparés à la fonction Zip()
, donc Zip()
associe 1
avec 3
avec 8
d'abord, puis 2
avec 4
et 9
. Celles-ci correspondent bien aux colonnes, ou à la transposition de l
.
Zip()
produit des n-uplets; si vous devez avoir des objets de liste mutables, il suffit de map()
les tuples à des listes ou d'utiliser une compréhension de liste pour produire une liste de listes:
map(list, Zip(*l)) # keep it a generator
[list(t) for t in Zip(*l)] # consume the Zip generator into a list of lists
Si vous voulez une liste de listes:
>>> [list(t) for t in Zip(*l)]
[[1, 3, 8], [2, 4, 9]]
Si une liste de tuples est OK:
>>> Zip(*l)
[(1, 3, 8), (2, 4, 9)]