2009-12-11 5 views

Répondre

10

Utilisez zip.

l1 = [1, 2, 3] 
l2 = [4, 5, 6] 
>>> zip(l1, l2) 
[(1, 4), (2, 5), (3, 6)] 

Notez que si vos listes sont de longueurs différentes, le résultat sera tronqué à la longueur de l'entrée la plus courte.

>>> print zip([1, 2, 3],[4, 5, 6, 7]) 
[(1, 4), (2, 5), (3, 6)] 

Vous pouvez également utiliser zip avec plus de deux listes:

>>> zip([1, 2, 3], [4, 5, 6], [7, 8, 9]) 
[(1, 4, 7), (2, 5, 8), (3, 6, 9)] 

Si vous avez une liste de listes, vous pouvez appeler zip à l'aide d'un astérisque:

>>> l = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] 
>>> zip(*l) 
[(1, 4, 7), (2, 5, 8), (3, 6, 9)] 
+0

+1 pour 'zip' avec l'argument astérisque. M'a beaucoup aidé! – erickrf

12

La zip fonction standard fait pour vous:

>>> l1 = [4, 6, 8] 
>>> l2 = ["a", "b", "c"] 
>>> zip(l1, l2) 
[(4, 'a'), (6, 'b'), (8, 'c')] 

Si vous utilisez 3.x Python, puis retourne zip un générateur et vous pouvez le convertir en une liste à l'aide du constructeur list():

>>> list(zip(l1, l2)) 
[(4, 'a'), (6, 'b'), (8, 'c')] 
1
>>> l1 = [4, 6, 8]; l2 = ['a', 'b', 'c'] 
>>> zip(l1, l2) 
[(4, 'a'), (6, 'b'), (8, 'c')] 
0

Si les listes ont la même longueur ou si vous voulez que la longueur de la liste soit la longueur de la liste la plus courte, utilisez zip, comme Les gens ont souligné.

Si les listes sont différentes longueurs, vous pouvez utiliser map avec une fonction de transformation de None:

>>> l1 = [1, 2, 3, 4, 5] 
>>> l2 = [9, 8, 7] 
>>> map(None, l1, l2) 
[(1, 9), (2, 8), (3, 7), (4, None), (5, None)] 

Notez que les valeurs « extra » s'appairés avec None.

Il est également intéressant de noter que les deux zip et map peut être utilisé avec un certain nombre de iterables:

>>> zip('abc', 'def', 'ghi') 
[('a', 'd', 'g'), ('b', 'e', 'h'), ('c', 'f', 'i')] 
>>> map(None, 'abc', 'def', 'gh') 
[('a', 'd', 'g'), ('b', 'e', 'h'), ('c', 'f', None)] 
Questions connexes