zip_longest
из модуля itertools
для объединения списков разной длины. Она заполнит недостающие элементы значением None
(по умолчанию) или указанным вами:
import itertools
list1 = [1, 2, 3]
list2 = ['a', 'b']
list3 = ['x', 'y', 'z', 'w']
for item in itertools.zip_longest(list1, list2, list3, fillvalue='-'):
print(item)
Результат: (1, 'a', 'x'), (2, 'b', 'y'), (3, '-', 'z'), ('-', '-', 'w')
Для объединения нескольких списков разной длины с помощью zip()
, нужно учитывать, что zip()
по умолчанию останавливается, когда заканчивается самый короткий список. Чтобы обработать все элементы из всех списков, можно использовать функцию zip_longest()
из модуля itertools
.
Пример использования zip()
:
list1 = [1, 2, 3]
list2 = ['a', 'b']
list3 = ['x', 'y', 'z', 'w']
result = list(zip(list1, list2, list3))
print(result) # Output: [(1, 'a', 'x'), (2, 'b', 'y')]
В этом случае, zip()
остановится после обработки двух элементов, так как list2
содержит только два элемента.
Пример использования zip_longest()
:
from itertools import zip_longest
list1 = [1, 2, 3]
list2 = ['a', 'b']
list3 = ['x', 'y', 'z', 'w']
result = list(zip_longest(list1, list2, list3, fillvalue=None))
print(result) # Output: [(1, 'a', 'x'), (2, 'b', 'y'), (3, None, 'z'), (None, None, 'w')]
Здесь zip_longest()
продолжает итерацию до тех пор, пока не будут обработаны все элементы из самого длинного списка. Аргумент fillvalue
определяет значение, которое будет использоваться для заполнения отсутствующих элементов в более коротких списках. По умолчанию fillvalue
равно None
, но можно установить любое другое значение.
Объяснение:
zip()
возвращает итератор кортежей, где каждый кортеж содержит элементы с одинаковым индексом из каждого входного списка.zip_longest()
возвращает итератор кортежей, продолжая итерацию до тех пор, пока не будут обработаны все элементы из самого длинного списка. Она заполняет отсутствующие значения с помощью fillvalue
.Вывод: Для объединения списков разной длины и обработки всех элементов из каждого списка, следует использовать zip_longest()
из модуля itertools
с указанием значения для заполнения отсутствующих элементов (fillvalue
).