Como fazer um looping através de múltiplas listas em Python

mo abdelazim 30 janeiro 2023
  1. zip() Função em Python 3.x
  2. zip() Função em Python 2.x
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

Artigo relacionado - Python List