Python Enumerate and Zip
Loop efficiently using enumerate and zip functions.
Better looping techniques.
Enumerate
```python fruits = ["apple", "banana", "orange"]
Without enumerate for i in range(len(fruits)): print(f"{i}: {fruits[i]}")
With enumerate (better) for index, fruit in enumerate(fruits): print(f"{index}: {fruit}") # 0: apple # 1: banana # 2: orange
Start from custom index for index, fruit in enumerate(fruits, start=1): print(f"{index}: {fruit}") ```
Zip
```python names = ["Tom", "Sarah", "Mike"] ages = [25, 28, 30] cities = ["Austin", "Miami", "Denver"]
Combine lists for name, age, city in zip(names, ages, cities): print(f"{name} is {age} from {city}") # Tom is 25 from Austin # Sarah is 28 from Miami # Mike is 30 from Denver ```
Zip to Dictionary
```python keys = ["name", "age", "city"] values = ["Tom", 25, "Austin"]
person = dict(zip(keys, values)) print(person) # {'name': 'Tom', 'age': 25, 'city': 'Austin'} ```
Unzip
```python pairs = [(1, "a"), (2, "b"), (3, "c")]
numbers, letters = zip(*pairs) print(numbers) # (1, 2, 3) print(letters) # ('a', 'b', 'c') ```
Practical Example
```python students = ["Tom", "Sarah", "Mike"] scores = [85, 92, 78]
Create leaderboard leaderboard = list(zip(students, scores)) leaderboard.sort(key=lambda x: x[1], reverse=True)
for rank, (student, score) in enumerate(leaderboard, start=1): print(f"{rank}. {student}: {score}") # 1. Sarah: 92 # 2. Tom: 85 # 3. Mike: 78 ```
Remember
- enumerate() for index + value - zip() to combine lists - zip stops at shortest list