2009-03-20 9 views
4

Si j'ai une liste comme ceci:tableau Extrait de la liste en python

>>> data = [(1,2),(40,2),(9,80)]

comment puis-je extraire les deux listes [1,40,9] et [2,2,80]? Bien sûr, je peux itérer et extraire les chiffres moi-même mais je suppose qu'il y a un meilleur moyen?

+1

Ce n'est pas "extraction". Ceci est parfois appelé un "pivot". Vous modifiez la structure de votre liste sans en extraire un sous-ensemble. –

Répondre

14

Liste compréhensions sauver la journée:

first = [x for (x,y) in data] 
second = [y for (x,y) in data] 
26

L'opération Décompressez est:

In [1]: data = [(1,2),(40,2),(9,80)] 
In [2]: zip(*data) 
Out[2]: [(1, 40, 9), (2, 2, 80)] 

Edit: Vous pouvez décomposer la liste résultant de la cession:

In [3]: first_elements, second_elements = zip(*data) 

Et si vous vraiment besoin de listes comme résultats:

In [4]: first_elements, second_elements = map(list, zip(*data)) 

Pour mieux comprendre pourquoi cela fonctionne:

zip(*data) 

est équivalent à

zip((1,2), (40,2), (9,80)) 

Les deux tuples dans la liste des résultats sont construits à partir des premiers éléments des arguments de zip() et à partir des deuxièmes éléments des arguments de zip().

5

Il y a aussi

In [1]: data = [(1,2),(40,2),(9,80)] 
In [2]: x=map(None, *data) 
Out[2]: [(1, 40, 9), (2, 2, 80)] 
In [3]: map(None,*x) 
Out[3]: [(1, 2), (40, 2), (9, 80)] 
Questions connexes