Comment faire une boucle for ou une compréhension de liste afin que chaque itération me donne deux éléments ?
Sortie :
Merci.
Comment faire une boucle for ou une compréhension de liste afin que chaque itération me donne deux éléments ?
Sortie :
Merci.
Vous avez besoin d'un pairwise()
(ou grouped()
) mise en œuvre:
from itertools import izip
def pairwise(iterable):
"s -> (s0,s1), (s2,s3), (s4, s5), ..."
a = iter(iterable)
return izip(a, a)
for x, y in pairwise(l):
print "%d + %d = %d" % (x, y, x + y)
Ou, de façon plus générale:
from itertools import izip
def grouped(iterable, n):
"s -> (s0,s1,s2,...sn-1), (sn,sn+1,sn+2,...s2n-1), (s2n,s2n+1,s2n+2,...s3n-1), ..."
return izip(*[iter(iterable)]*n)
for x, y in grouped(l, 2):
print "%d + %d = %d" % (x, y, x + y)
En Python 3+, vous pouvez simplement utiliser l' zip()
fonction intégrée.
Tout le crédit à martineau pour sa réponse à ma question, j'ai trouvé ceci pour être très efficace, car il ne réitère une fois de plus de la liste et de ne pas créer des listes inutiles dans le processus.
N. B: Ce ne doit pas être confondue avec l' pairwise
recette en Python propre itertools
de la documentation, ce qui donne "s -> (s0,s1), (s1,s2), (s2, s3), ...", comme l'a souligné @lazyr dans les commentaires.
for (i, k) in zip(l[::2], l[1::2]):
print i, "+", k, "=", i+k
zip(*iterable)
renvoie un tuple avec l'élément suivant de chaque objet iterable.
l[::2]
retourne le 1er, le 3ème, le 5ème, etc. élément de la liste: le premier colon indique que la tranche commence au début car il n'y a pas de numéro derrière elle, la deuxième du côlon est nécessaire uniquement si vous souhaitez une " étape dans la tranche (dans ce cas 2).
l[1::2]
fait la même chose mais dans le deuxième élément de la liste afin qu'il renvoie les 2ème, 4ème, 6ème, etc. élément de l' original de la liste.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.