Параллельный обход двух списков

В этом примере посмотрим, как пройтись по двум спискам одновременно. Покажем два способа: через zip() (стандартный для Python 3) и через itertools.zip_longest() — если списки разной длины и нужно дотянуть обход до конца более длинного.

Что нужно знать

Перед изучением примера полезно понимать:

Пример 1. Через zip() (Python 3+)

list_1 = [1, 2, 3, 4]
list_2 = ['a', 'b', 'c']

for i, j in zip(list_1, list_2):
    print(i, j)

Вывод

1 a
2 b
3 c

С помощью zip() можно параллельно идти по двум спискам, как показано выше.

Цикл останавливается, как только заканчивается более короткий список (если не задавать дополнительных условий).

Пример 2. Через itertools (Python 2+)

import itertools

list_1 = [1, 2, 3, 4]
list_2 = ['a', 'b', 'c']

# loop until the short loop stops
for i,j in zip(list_1,list_2):
    print(i,j)

print("\n")

# loop until the longer list stops
for i,j in itertools.zip_longest(list_1,list_2):
    print(i,j)

Вывод

1 a
2 b
3 c

1 a
2 b
3 c
4 None

Метод zip_longest() из модуля itertools тоже идёт по двум спискам параллельно, но останавливается на конце более длинного списка. Недостающие элементы короткого списка заполняются значением None.