Como usar a função zip em Python

Função zip em Python

A função zip em Python é uma função integrada (built-in) que permite combinar duas ou mais sequências (listas, tuplas, etc.) em um objeto zip. A partir desse objeto zip, é possível criar iteráveis de tuplas contendo elementos correspondentes de cada sequência original.

Essa função permite usar um laço for para percorrer várias sequências em paralelo.

Da forma mais simples, ela toma uma ou mais sequências e retorna uma lista de tuplas composta por pares de itens paralelos, obtidos a partir dos argumentos passados.

Por exemplo, suponha duas listas de valores numéricos, L1 e L2:

L1 = [1, 3, 5, 7]
L2 = [0, 2, 4, 6]

Podemos combinar os itens dessas listas, dois a dois, com a função zip, da seguinte forma:

zip(L1, L2)

Obtendo assim uma lista de pares na forma de tuplas:

[(1, 0), (3, 2), (5, 4), (7, 6)]

Perceba que o primeiro elemento da primeira lista foi combinado com o primeiro elemento da segunda lista (1 e 0), o segundo elemento da primeira lista foi combinado com o segundo elemento da segunda lista (3 e 2), e assim por diante.

Sintaxe

A sintaxe básica da função zip é a seguinte:

zip(*iteráveis)

Onde *iteráveis é um argumento de comprimento variável que pode aceitar duas ou mais sequências como argumentos separados por vírgulas. A função zip retorna um objeto iterável que contém tuplas com elementos correspondentes de cada uma das sequências.

Exemplos

Por exemplo, vamos criar duas listas com nomes e idades:

nomes = ['Ana', 'Carlos', 'Lucas']
idades = [23, 30, 42]

Podemos então combinar essas duas listas usando a função zip:

combinado = zip(nomes, idades)

Agora, podemos iterar sobre o objeto combinado para obter cada tupla de elementos correspondentes das listas originais:

for nome, idade in combinado:
    print(nome, idade)

Script completo:

nomes = ['Ana', 'Carlos', 'Lucas']
idades = [23, 30, 42]
combinado = zip(nomes, idades)

for nome, idade in combinado:
    print(nome, idade)

O resultado será:

Ana 23
Carlos 30
Lucas 42

Vale ressaltar que o objeto zip é iterável apenas uma vez – se o laço for executado novamente, nada será mostrado. Se precisarmos usar os valores mais de uma vez, será necessário armazenar o objeto zip em uma lista ou tupla:

combinado = list(zip(nomes, idades))

Outra característica importante da função zip é que ela retorna tuplas com o menor comprimento das sequências passadas como argumentos. Isso significa que se as sequências tiverem comprimentos diferentes, o objeto zip será criado apenas com o menor número de elementos correspondentes, truncando os demais.

Por exemplo, vamos acrescentar uma nova lista com nomes e profissões:

nomes = ['Ana', 'Carlos', 'Lucas']
profissoes = ['Engenheira', 'Advogado', 'Professor', 'Médico']

Se usarmos a função zip com as listas nomes e profissões, apenas os três primeiros elementos serão combinados:

combinado = zip(nomes, profissoes)

for nome, profissao in combinado:
    print(nome, profissao)

O resultado será:

Ana Engenheira
Carlos Advogado
Lucas Professor

Assim, a função zip é uma ferramenta poderosa para combinar elementos correspondentes de duas ou mais sequências em um objeto zip. A partir desse objeto, podemos criar iteráveis de tuplas que podem ser usados em diversas situações, como na iteração sobre múltiplas listas ou na criação de dicionários.

Tuplas e Múltiplos Argumentos

A função zip aceita mais de dois argumentos, de qualquer tipo de sequência.

Por exemplo, vamos aplicar a função zip sobre três sequências do tipo tupla:

Ta, Tb, Tc = (1, 5, 9), (0, 2, 6), (3, 7, 10)
Tt = zip(Ta, Tb, Tc)

for a, b, c in Tt:
    print(a, b, c)

Resultado:

1 0 3
5 2 7
9 6 10

Zip e Strings

As sequências também podem ser strings, e neste caso a combinação se dará caractere a caractere:

s1 = 'Fábio'
s2 = '12345'
s3 = zip(s1, s2)

for a, b in s3:
    print(a, b)

Resultado:

F 1
á 2
b 3
i 4
o 5

Zip e Dicionários

Como criar um dicionário a partir de duas listas de valores usando a função zip em python? Este é um caso comum, no qual o programa recebe chaves e valores de um dicionário na forma de listas de valores em tempo de execução (com o script já escrito).

Para testar isso vamos criar um dicionário a partir de duas listas, uma contendo espécies de animais e outra com os tipos de cada espécie. Usaremos a função zip() para parear os dados.

As listas são as seguintes:

animais = lontra, joaninha, gato, atum, borboleta, pirarucu, capivara
tipo_animal = mamífero, inseto, mamífero, peixe, inseto, peixe, mamífero

A função zip cria um iterador que combina elementos de cada uma das sequências (listas, tuplas ou outros iteráveis) em tuplas, até que um dos iteradores seja esgotado. Podemos então transformar o iterador em um dicionário utilizando a função dict.

No caso específico em que temos as duas listas de nomes animais e tipo_animal, podemos criar um dicionário em que as chaves são os elementos da lista animais e os valores são os elementos correspondentes da lista tipo_animal da seguinte forma:

animais = ['lontra', 'joaninha', 'gato', 'atum', 'borboleta', 'pirarucu', 'capivara']
tipo_animal = ['mamífero', 'inseto', 'mamífero', 'peixe', 'inseto', 'peixe', 'mamífero']

dicionario = dict(zip(animais, tipo_animal))
print(dicionario)

O resultado será um dicionário contendo as correspondências entre os elementos das listas:

{'lontra': 'mamífero', 'joaninha': 'inseto', 'gato': 'mamífero', 'atum': 'peixe', 'borboleta': 'inseto', 'pirarucu': 'peixe', 'capivara': 'mamífero'}

Neste exemplo a função zip combinou os elementos de cada lista em tuplas, que foram então transformadas em pares chave-valor no dicionário.

É isso aí! Neste tutorial aprendemos a usar a função zip em Python. Nas próximas lições veremos outras funções e conceitos muito importantes, como a função map() e compreensão de listas, entre outros.

 

Sobre Fábio dos Reis (1197 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 30 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Ciência e Tecnologia em geral, adora Viagens e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.

Escreva um comentário

Seu e-mail não será divulgado


*