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)