Python: comment itérer sur 2 itérables séquentiellement (pas zip) [dupliquer]

Aug 21 2020

Imaginez que j'ai 2 itérables de tous types, disons par exemple une liste et une chaîne:

a = [1, 2, 3]
b = "abc"

Existe-t-il un moyen concis et convivial pour python d'itérer séquentiellement a et b (pas en parallèle comme avec zip) sans tromper (l'idée ici est que a et b peuvent être tout ce que nous savons juste qu'ils sont itérables)

Donc rien de tel que:

for i in a + list(b):

Idéalement, j'aurais quelque chose:

for i in something(a, b):
    print(i)

cela équivaudrait à faire

for i in a:
    print(i)
for i in b:
    print(i)

Réponses

1 Jab Aug 21 2020 at 04:46

Le "quelque chose" que vous recherchez est itertools.chain:

from itertools import chain

for i in chain(a, b):
    print(i)

1
2
3
a
b
c
1 lxop Aug 21 2020 at 04:46

Ce que vous recherchez est itertools.chain:https://docs.python.org/3.8/library/itertools.html#itertools.chain

Vous l'utiliseriez comme ceci:

import itertools
a = [1,2,3]
b = "abc"
for i in itertools.chain(a, b):
    print(i)

qui produit

1
2
3
a
b
c
Code-Apprentice Aug 21 2020 at 04:46

itertools.chain () fait l'affaire. Vous devez garder cette bibliothèque à l'esprit lorsque vous recherchez des choses comme celle-ci.