Идиома Python для связывания (сглаживания) бесконечной итерации конечных итераций?

Предположим, у нас есть итератор (бесконечный), который возвращает списки (или конечные итераторы), например, возвращаемый

infinite = itertools.cycle([[1,2,3]])

Какая хорошая идиома Python для получения итератора (очевидно, бесконечного), который будет возвращать каждый из элементов из первого итератора, затем каждый из второго и т. д. В приведенном выше примере он вернет 1,2,3,1,2,3,.... Итератор бесконечен, поэтому itertools.chain(*infinite) работать не будет.

Связанный

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
24
0
22 128
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Используйте генератор:

(item for it in infinite for item in it)

Конструкция * распаковывается в кортеж для передачи аргументов, поэтому использовать ее невозможно.

Ответ принят как подходящий

Начиная с Python 2.6, вы можете использовать itertools.chain.from_iterable:

itertools.chain.from_iterable(iterables)

Вы также можете сделать это с помощью вложенного генератора:

def flatten(iterables):
    return (elem for iterable in iterables for elem in iterable)

Могу ли я присоединяться к спискам с ';' ?

diffracteD 21.07.2016 14:30

@diffracteD - присоединиться к бесконечному количеству предметов? Нет, не совсем

Mr_and_Mrs_D 29.05.2017 20:13

Другие вопросы по теме