Como fazer um looping através de múltiplas listas em Python
Este tutorial explica como iterar através de duas listas/tuplos ao mesmo tempo em Python. Utilizaremos zip()
e itertools.zip_longest()
e explicaremos as diferenças entre elas e como utilizar cada uma delas. Veremos também como o tipo de retorno zip()
é diferente em Python 2 e 3.
zip()
Função em Python 3.x
A função zip()
aceita múltiplas listas/tuplos como argumentos e retorna um objeto zip
, que é um iterador de tuplos.
Use zip()
para iterar em duas listas
Passe ambas as listas para a função zip()
e utilize para iterar o loop através do 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
Utilize zip()
para Iterar através de duas listas com comprimentos diferentes
Se as listas tiverem comprimentos diferentes, zip()
pára quando a lista mais curta termina. Veja o código abaixo.
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 através de duas listas
Se você precisar iterar através de duas listas até que a mais longa termine, utilize itertools.zip_longest()
. Ele funciona exatamente como a função zip()
, exceto que pára quando a lista mais longa termina.
Ele preenche os valores vazios com None
, e retorna um iterador de tuplos.
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
O fillvalue
padrão é None
, mas você pode definir fillvalue
para qualquer 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
Utilize zip()
Com Múltiplas Listas
zip()
e suas funções de irmão podem aceitar mais de duas 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()
Função em Python 2.x
zip()
função em Python 2.x também aceita múltiplas listas/tuplos como argumentos, mas retorna uma lista de tuplos. Isso funciona bem para listas pequenas, mas se você tiver listas enormes, você deve utilizar itertools.izip()
em vez disso, porque retorna um iterador de tupples.
Use itertools.izip()
para iterar através de duas 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