How to process iterators in parallel using ZIP

The zip() function allows you to iterate over multiple sequences in parallel, pairing elements by index. This is particularly useful for processing corresponding elements from different iterables simultaneously.

Basic List Processing Example

First, let's see a traditional approach to multiply each element by 5 ?

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
multiply_by_5 = []
for x in numbers:
    multiply_by_5.append(x * 5)
print(f"Output: {multiply_by_5}")
Output: [5, 10, 15, 20, 25, 30, 35, 40, 45, 50]

Using list comprehension, we can achieve the same result more concisely ?

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
multiply_by_5 = [x * 5 for x in numbers]
print(f"Output: {multiply_by_5}")
Output: [5, 10, 15, 20, 25, 30, 35, 40, 45, 50]

Processing Multiple Lists with Traditional Loop

When you need to process corresponding elements from multiple lists, you can use index-based iteration ?

list1 = [100, 200, 300, 400]
list2 = [500, 600, 700, 800]

# Add corresponding elements using traditional loop
result = []
for i in range(len(list1)):
    added_value = list1[i] + list2[i]
    result.append(added_value)
print(f"Output: {result}")
Output: [600, 800, 1000, 1200]

Using zip() for Parallel Processing

The zip() function provides a cleaner approach by pairing corresponding elements from multiple iterables ?

list1 = [100, 200, 300, 400]
list2 = [500, 600, 700, 800]

# Add corresponding elements using zip
result = [(a + b) for a, b in zip(list1, list2)]
print(f"Output: {result}")
Output: [600, 800, 1000, 1200]

Handling Unequal Length Iterables

The zip() function stops when the shortest iterable is exhausted. This can lead to silent data loss ?

list1 = [100, 200, 300, 400, 1000]  # 5 elements
list2 = [500, 600, 700, 800]        # 4 elements

print(f"Length of list1: {len(list1)}, Length of list2: {len(list2)}")

result = [(a + b) for a, b in zip(list1, list2)]
print(f"Result: {result}")
Length of list1: 5, Length of list2: 4
Result: [600, 800, 1000, 1200]

Using zip_longest() for Complete Processing

The itertools.zip_longest() function continues until all iterables are exhausted, filling missing values with None ?

from itertools import zip_longest

list1 = [100, 200, 300, 400, 1000]
list2 = [500, 600, 700, 800]

result = []
for a, b in zip_longest(list1, list2, fillvalue=0):
    result.append(a + b)
    
print(f"Output: {result}")
Output: [600, 800, 1000, 1200, 1000]

Comparison

Method Handles Unequal Lengths Best For
zip() No (stops at shortest) Equal-length iterables
zip_longest() Yes (with fillvalue) Unequal-length iterables
Index-based loop Manual control needed Complex logic required

Conclusion

Use zip() for processing multiple iterables in parallel when they have equal lengths. For unequal lengths, use zip_longest() with appropriate fillvalue to avoid silent data loss.

Updated on: 2026-03-25T11:52:18+05:30

416 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements