11
votes

Utilisation de la compréhension de la liste dans Python pour faire quelque chose de similaire à Zip ()?

Je suis un débutant python et une des choses que j'essaye de faire est d'envelopper ma tête autour de la compréhension de la liste. Je peux voir que c'est une caractéristique assez puissante qui vaut la peine d'apprendre. XXX

Comment utiliser la compréhension de la liste afin que je puisse obtenir les résultats comme une série de listes dans une liste, plutôt qu'une série de Les tuples dans une liste? xxx

(Je me rends compte que les dictionnaires seraient probablement plus appropriés dans cette situation, mais j'essaie simplement de comprendre des listes un peu mieux). Merci!


0 commentaires

5 Réponses :


37
votes

Quelque chose comme ceci:

map(list, zip(cities, airports))


0 commentaires

1
votes

Ceci prend zip code> s de la sortie et convertit tous les tuples à des listes: xxx pré>

comme pour les performances de chaque: p>

$ python -m timeit -c '[ [a, b] for a, b in zip(xrange(100), xrange(100)) ]'
10000 loops, best of 3: 68.3 usec per loop

$ python -m timeit -c 'map(list, zip(xrange(100), xrange(100)))'
10000 loops, best of 3: 75.4 usec per loop

$ python -m timeit -c '[ list(x) for x in zip(range(100), range(100)) ]'
10000 loops, best of 3: 99.9 usec per loop


0 commentaires

4
votes

Compréhension de la liste, sans aide de zip , cartographique ou itTools , impossible d'instituer une "boucle parallèle" sur plusieurs séquences - - Seules des boucles simples sur une séquence ou des "boucles" imbriquées "sur plusieurs.


0 commentaires

6
votes

Si vous vouliez le faire sans utiliser ZIP du tout, vous devez faire quelque chose comme ceci:

[ [cities[i],airports[i]] for i in xrange(min(len(cities), len(airports))) ]


1 commentaires

D'autre part, utiliser une compréhension de la liste et une fermeture à glissière est tout aussi courte, et pour moi au moins, encore plus simple. Est-ce que vous savez comment savoir comment la performance se comparerait à la carte?



1
votes

possible d'utiliser énumérer , aussi bien: xxx


0 commentaires