Архивирование списков разного размера с помощью встроенных функций
Хотя встроенная функция zip не может повторить более короткий список при объединении двух списков разного размера, для достижения этого результата можно использовать функцию itertools.cycle.
cycle из пакета Python itertools создает итератор, который неоднократно возвращает элементы из итерируемого объекта, даже после его исчерпания. Комбинируя zip с циклом, можно справиться с несоответствием размеров между списками и обеспечить повторение более длинного списка по мере необходимости.
Пример:
A = [1, 2, 3, 4, 5, 6, 7, 8, 9]
B = ["A", "B", "C"]
# Use itertools.cycle to repeat the shorter list
from itertools import cycle
zip_list = zip(A, cycle(B)) if len(A) > len(B) else zip(cycle(A), B)
В этом примере:
Результат:
zip_list будет содержать следующие кортежи в качестве объекта-генератора:
[(1, 'A'), (2, 'B'), (3, 'C'), (4, 'A'), (5, 'B'), (6, 'C'), (7, 'A'), (8, 'B'), (9, 'C')]
Как это работает:
itertools.cycle создает копию итерируемого объекта (в данном случае B) и неоднократно возвращает его элементы. Когда zip выполняет итерацию по A, он объединяет каждый элемент со следующим доступным элементом циклического итератора.
Если A короче B, процесс начинается заново с начала B, как только его итератор исчерпан. И наоборот, если A длиннее, итератор B непрерывно заполняет оставшуюся часть объединенного списка.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3