Cómo hacer un bucle a través de múltiples listas en Python
Este tutorial explica cómo iterar a través de dos listas/tuplas al mismo tiempo en Python. Usaremos zip()
y itertools.zip_longest()
y explicaremos las diferencias entre ellas y cómo usar cada una. También veremos cómo el tipo de retorno zip()
es diferente en Python 2 y 3.
zip()
Función en Python 3.x
La función zip()
acepta múltiples listas/tuplas como argumentos y devuelve un objeto zip
, que es un iterador de tuplas.
Usa zip()
para iterar a través de dos listas
Pasa ambas listas a la función zip()
y úsalas para el bucle para iterar a través del iterador de resultados.
listA = [1, 2, 3, 4]
listB = [10, 20, 30, 40]
for a, b in zip(listA, listB):
print(a, b)
Resultado:
1 10
2 20
3 30
4 40
Usa zip()
para iterar a través de dos listas con diferentes longitudes
Si las listas tienen diferentes longitudes, zip()
se detiene cuando la lista más corta termina. Vea el código a continuación.
listA = [1, 2, 3, 4, 5, 6]
listB = [10, 20, 30, 40]
for a, b in zip(listA, listB):
print(a, b)
Resultado:
1 10
2 20
3 30
4 40
Use itertools.zip_longest()
para Iterar a través de dos listas
Si necesitas iterar a través de dos listas hasta que la más larga termine, usa itertools.zip_longest()
. Funciona igual que la función zip()
excepto que se detiene cuando termina la lista más larga.
Llena los valores vacíos con None
, y devuelve un iterador de tuplas.
import itertools
listA = [1, 2, 3, 4, 5, 6]
listB = [10, 20, 30, 40]
for a, b in itertools.zip_longest(listA, listB):
print(a, b)
Resultado:
1 10
2 20
3 30
4 40
5 None
6 None
El fillvalue
por defecto es None
, pero puedes poner fillvalue
a cualquier valor.
import itertools
listA = [1, 2, 3, 4, 5, 6]
listB = [10, 20, 30, 40]
for a, b in itertools.zip_longest(listA, listB, fillvalue=0):
print(a, b)
Resultado:
1 10
2 20
3 30
4 40
5 0
6 0
Usa zip()
con múltiples listas
zip()
y sus funciones de hermano pueden aceptar más de dos listas.
import itertools
codes = [101, 102, 103]
students = ["James", "Noah", "Olivia"]
grades = [65, 75, 80]
for a, b, c in itertools.zip_longest(codes, students, grades, fillvalue=0):
print(a, b, c)
Resultado:
101 James 65
102 Noah 75
103 Olivia 80
zip()
Función en Python 2.x
La función zip()
en Python 2.x también acepta múltiples listas/tuplas como argumentos pero devuelve una lista de tuplas. Eso funciona bien para listas pequeñas, pero si tienes listas enormes, deberías usar itertools.izip()
en su lugar, porque devuelve un iterador de tuplas.
Usa itertools.izip()
para Iterar a través de dos listas
import itertools
listA = [1, 2, 3, 4]
listB = [10, 20, 30, 40]
for a, b in itertools.izip(listA, listB):
print(a, b)
Resultado:
1 10
2 20
3 30
4 40
Artículo relacionado - Python List
- Convertir un diccionario en una lista en Python
- Eliminar todas las apariciones de un elemento de una lista en Python
- Eliminar duplicados de una lista en Python
- Cómo obtener el promedio de una lista en Python
- ¿Cuál es la diferencia entre los métodos de lista que añaden y amplían
- Cómo convertir una lista en cadena en Python