comment obtenir les tuples à partir de listes à l'aide de compréhension de liste en python
J'ai deux listes et souhaitez les fusionne en une seule liste de tuples
. Je veux le faire avec list comprehension
, je peux le faire fonctionner à l'aide de map
. mais il serait bon de savoir comment compréhension de liste ici fonctionne.
code ici
>>> lst = [1,2,3,4,5]
>>> lst2 = [6,7,8,9,10]
>>> tup = map(None,lst,lst2) # works fine
>>> tup
[(1, 6), (2, 7), (3, 8), (4, 9), (5, 10)]
>>> l3 = [lst, lst2]
>>> l3
[[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]
>>> zip(*l3) # works fine
[(1, 6), (2, 7), (3, 8), (4, 9), (5, 10)]
>>> [(i,j) for i in lst and for j in lst2] # does not work
File "<stdin>", line 1
[(i,j) for i in lst and for j in lst2]
^
SyntaxError: invalid syntax
>>>
J'ai écrit des commentaires où elle travaille et où elle ne l'est pas. Comment un deux for-loop
être couplé à list comprehension
OriginalL'auteur eagertoLearn | 2013-09-24
Vous devez vous connecter pour publier un commentaire.
Penser interprétations de la liste que les boucles. Comment pouvez-vous écrire 2 pas de boucles imbriquées?
Vous pouvez le faire avec un peu bizarre compréhension de liste:
ou
Mais en fait, il est préférable d'utiliser
zip
.OriginalL'auteur Roman Pekar
La liste de compréhension de la façon dont est stupide, parce qu'il encapsule un rien de compréhension de liste autour de
zip
:Suffit d'utiliser
zip
, c'est ce qu'il est. Il n'y a pas de sens en vous forçant à utiliser interprétations de la liste quand ils n'ont pas accomplir quoi que ce soit.Edit: Si votre question est "comment puis-je obtenir deux boucles for dans une compréhension de liste", vous devriez demander à la place. La réponse est "Vous ne pouvez pas obtenir en PARALLÈLE les deux
for
boucles dans une compréhension de liste". Tout le temps de vous mettre deuxfor
clauses dans une compréhension de liste, ils seront imbriquées. Que, une compréhension de liste comme ceci:Fonctionne comme imbriquées
for
boucles:Vous ne pouvez pas écrire une compréhension de liste qui fait cela:
. . . et vous n'en avez pas besoin, parce que vous avez la
zip
fonction pour le faire à la place.(Vous pouvez sorte de faux à l'aide d'une solution comme @Romain Pekar, mais cela ne veut pas vraiment faire deux
for
de boucles; il fait un seul et utilise les valeurs de celui-ci pour arriver dans l'autre liste.)zip(lst, lst2) [(1, 6), (2, 7), (3, 8), (4, 9), (5, 10)] >>> [(i,j) for i, j in zip(lst, lst2)] [(1, 6), (2, 7), (3, 8), (4, 9), (5, 10)]
j'aimerais réaliser cela, sans utiliserzip
si possiblepourquoi ne voulez-vous pas utiliser zip?
comme ma question dit que je veux utiliser compréhension de liste, tout simplement parce que je veux voir comment obtenir les deux pour des boucles à l'intérieur de compréhension de liste, je ne sais comment zip fonctionne bien et il est assez simple à utiliser avec zip
comme je le vois, les interprétations de la liste est fondamentalement un raccourci pour les boucles. Comment pouvez-vous écrire 2 pas de boucles imbriquées?
Voir mon édité réponse. La réponse est que vous ne pouvez pas obtenir deux boucles imbriquées en une compréhension de liste.
OriginalL'auteur BrenBarn