Генератор сцепления и предмет - PullRequest
28 голосов
/ 14 марта 2010

У меня есть генератор (числа) и значение (число). Я хотел бы перебрать их, как если бы они были одной последовательностью:

i for i in tuple(my_generator) + (my_value,)

Проблема, насколько я понимаю, создает 3 кортежа только для немедленной их отмены, а также копирует элементы в my_generator один раз.

Лучше будет:

def con(seq, item):
    for i in seq:
        yield seq
    yield item

i for i in con(my_generator, my_value)

Но мне было интересно, возможно ли это сделать без определения этой функции

Ответы [ 3 ]

42 голосов
/ 14 марта 2010

itertools.chain рассматривает несколько последовательностей как одну последовательность.

Так что вы можете использовать его как:

import itertools

def my_generator():
    yield 1
    yield 2

for i in itertools.chain(my_generator(), [5]):
    print i

который будет выводить:

1
2
5
6 голосов
/ 14 марта 2010
4 голосов
/ 14 марта 2010

Попробуйте itertools.chain(*iterables). Документы здесь: http://docs.python.org/library/itertools.html#itertools.chain

...