A função `zip()` em [[Linguagem de programação Python|Python]] é uma ferramenta versátil que permite combinar elementos de múltiplos iteráveis (como listas, tuplas, strings, etc.) em pares. Ela retorna um **objeto `zip`**, que é um iterador de tuplas. Cada tupla contém o n-ésimo elemento de cada um dos iteráveis de entrada. # Como Funciona `zip()` pega um ou mais iteráveis como argumentos e "empacota" seus elementos correspondentes em tuplas. **Sintaxe:** `zip(*iteraveis)` * `*iteraveis`: Um número variável de iteráveis (listas, tuplas, strings, etc.). **Exemplo Básico:** ```python nomes = ("John", "Charles", "Mike") sobrenomes = ("Jenny", "Christy", "Monica") # Cria um objeto zip pares = zip(nomes, sobrenomes) # Para ver o conteúdo, você pode convertê-lo para uma lista ou tupla print(list(pares)) # Saída: [('John', 'Jenny'), ('Charles', 'Christy'), ('Mike', 'Monica')] # Ou iterar diretamente sobre ele # for nome, sobrenome in zip(nomes, sobrenomes): # print(f"{nome} {sobrenome}") ``` # Comprimentos Diferentes dos Iteráveis Se os iteráveis passados para `zip()` tiverem comprimentos diferentes, o iterador resultante terá o comprimento do **iterável mais curto**. Os elementos dos iteráveis mais longos que não têm um correspondente no iterável mais curto são simplesmente ignorados. **Exemplo com Comprimentos Diferentes:** ```python aulas = ["Matemática", "Português", "História", "Geografia"] notas = [90, 85, 78] # Uma nota a menos que as aulas combinado = zip(aulas, notas) print(list(combinado)) # Saída: [('Matemática', 90), ('Português', 85), ('História', 78)] # 'Geografia' foi ignorada porque não havia uma nota correspondente. ``` # Casos de Uso Comuns 1. **Iterar sobre Múltiplas Listas Simultaneamente:** ```python produtos = ['Maçã', 'Banana', 'Laranja'] precos = [2.50, 1.75, 3.00] for produto, preco in zip(produtos, precos): print(f"{produto}: R${preco:.2f}") # Saída: # Maçã: R$2.50 # Banana: R$1.75 # Laranja: R$3.00 ``` 2. **Criar Dicionários:** `zip()` é frequentemente usado em conjunto com a função `dict()` para criar dicionários a partir de duas listas (uma para chaves e outra para valores). ```python chaves = ['nome', 'idade', 'cidade'] valores = ['Alice', 30, 'Nova York'] pessoa = dict(zip(chaves, valores)) print(pessoa) # Saída: {'nome': 'Alice', 'idade': 30, 'cidade': 'Nova York'} ``` 3. **"Deszipar" (Unzipping) uma Sequência:** Você pode usar o operador `*` ([[Desempacotar sequencias em Python|desempacotamento de sequências]]) com `zip()` para reverter a operação, ou seja, transformar uma lista de tuplas de volta em tuplas de listas (ou outras sequências). ```python coordenadas = [(1, 2), (3, 4), (5, 6)] # Deszipa as coordenadas em duas tuplas separadas para x e y x_coords, y_coords = zip(*coordenadas) print(f"Coordenadas X: {x_coords}") # Saída: Coordenadas X: (1, 3, 5) print(f"Coordenadas Y: {y_coords}") # Saída: Coordenadas Y: (2, 4, 6) ``` A função `zip()` é uma ferramenta poderosa para trabalhar com múltiplos iteráveis de forma sincronizada, tornando o código mais limpo e eficiente. **:: Referência ::** [Função zip() do Python (w3schools.com)](https://www.w3schools.com/python/ref_func_zip.asp)