# How to Loop Through Multiple Lists in Python

mo abdelazim Feb 02, 2024

This tutorial explains how to iterate through two lists/tuples at the same time in Python. We will use `zip()` and `itertools.zip_longest()` and explain the differences between them and how to use each one. We’ll also see how the `zip()` return type is different in Python 2 and 3.

## `zip()` Function in Python 3.x

`zip()` function accepts multiple lists/tuples as arguments and returns a `zip` object, which is an iterator of tuples.

### Use `zip()` to Iterate Through Two Lists

Pass both lists to the `zip()` function and use for loop to iterate through the result iterator.

``````listA = [1, 2, 3, 4]
listB = [10, 20, 30, 40]

for a, b in zip(listA, listB):
print(a, b)
``````

Output:

``````1 10
2 20
3 30
4 40
``````

### Use `zip()` to Iterate Through Two Lists With Different Lengths

If lists have different lengths, `zip()` stops when the shortest list end. See the code below.

``````listA = [1, 2, 3, 4, 5, 6]
listB = [10, 20, 30, 40]

for a, b in zip(listA, listB):
print(a, b)
``````

Output:

``````1 10
2 20
3 30
4 40
``````

### Use `itertools.zip_longest()` to Iterate Through Two Lists

If you need to iterate through two lists till the longest one ends, use `itertools.zip_longest()`. It works just like the `zip()` function except that it stops when the longest list ends.

It fills the empty values with `None`, and returns an iterator of tuples.

``````import itertools

listA = [1, 2, 3, 4, 5, 6]
listB = [10, 20, 30, 40]

for a, b in itertools.zip_longest(listA, listB):
print(a, b)
``````

Output:

``````1 10
2 20
3 30
4 40
5 None
6 None
``````

The default `fillvalue` is `None`, but you can set `fillvalue` to any value.

``````import itertools

listA = [1, 2, 3, 4, 5, 6]
listB = [10, 20, 30, 40]

for a, b in itertools.zip_longest(listA, listB, fillvalue=0):
print(a, b)
``````

Output:

``````1 10
2 20
3 30
4 40
5 0
6 0
``````

### Use `zip()` With Multiple Lists

`zip()` and its sibling functions can accept more than two lists.

``````import itertools

codes = [101, 102, 103]
students = ["James", "Noah", "Olivia"]

for a, b, c in itertools.zip_longest(codes, students, grades, fillvalue=0):
print(a, b, c)
``````

Output:

``````101 James 65
102 Noah 75
103 Olivia 80
``````

## `zip()` Function in Python 2.x

`zip()` function in Python 2.x also accepts multiple lists/tuples as arguments but returns a list of tuples. That works fine for small lists, but if you have huge lists, you should use `itertools.izip()` instead, because it returns an iterator of tuples.

### Use `itertools.izip()` to Iterate Through Two Lists

``````import itertools

listA = [1, 2, 3, 4]
listB = [10, 20, 30, 40]

for a, b in itertools.izip(listA, listB):
print(a, b)
``````

Output:

``````1 10
2 20
3 30
4 40
``````