«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как сжать списки разного размера с помощью itertools.cycle в Python?

Как сжать списки разного размера с помощью itertools.cycle в Python?

Опубликовано 24 ноября 2024 г.
Просматривать:392

How to Zip Differently Sized Lists Using `itertools.cycle` in Python?

Архивирование списков разного размера с помощью встроенных функций

Хотя встроенная функция 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)

В этом примере:

  • if len(A) > len(B) проверяет, длиннее ли первый список (A), чем второй (B).
  • Если да, то он использует zip для объединения A с циклическим циклом итератор B, эффективно повторяющий B во всем объединенном результате.
  • Если B длиннее, он меняет порядок и вместо этого выполняет цикл A.

Результат:

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