Параллельный обход двух списков
В этом примере посмотрим, как пройтись по двум спискам одновременно. Покажем два способа: через zip() (стандартный для Python 3) и через itertools.zip_longest() — если списки разной длины и нужно дотянуть обход до конца более длинного.
Что нужно знать
Перед изучением примера полезно понимать:
Python: список (list) — списки
/python-programming/methods/built-in/zip/index — функция
zip()Python: цикл for — цикл
for
Пример 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.