Cómo hacer un bucle a través de múltiples listas en Python

mo abdelazim 30 enero 2023
  1. zip() Función en Python 3.x
  2. zip() Función en Python 2.x
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