Python: cómo iterar sobre 2 iterables secuencialmente (no zip) [duplicar]

Aug 21 2020

Imagine que tengo 2 iterables de cualquier tipo, digamos, por ejemplo, lista y cadena:

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

¿Existe una forma concisa amigable con Python de iterar sobre ayb secuencialmente (no en paralelo como con zip) sin engaños (la idea aquí es que ayb pueden ser cualquier cosa que sepamos que son iterables)

Entonces no hay tal cosa como:

for i in a + list(b):

Idealmente tendría algo:

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

eso sería equivalente a hacer

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

Respuestas

1 Jab Aug 21 2020 at 04:46

El "algo" que estás buscando es 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

Lo que busca es itertools.chain:https://docs.python.org/3.8/library/itertools.html#itertools.chain

Lo usarías así:

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

que produce

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

itertools.chain () hace el truco. Debe tener en cuenta esta biblioteca cuando busque cosas como esta.