Python-用于返回序列生成器

时间:2014-01-24 17:41:17

标签: python generator

我必须生成一个函数,它接受任意数量的序列并返回元组列表。 我尝试使用以下代码通过列表中的生成器逐个编写代码来生成元组:

>>> gen1 = [(x,y) for x in range(3) for y in range(4)]
>>> gen1
[(0, 0), (0, 1), (0, 2), (0, 3), (1, 0), (1, 1), (1, 2), (1, 3), (2, 0), (2, 1), (2, 2), (2, 3)]
>>> iter1 = iter(gen1)
>>> iter1.next()
>>> def gen3():
...     yield iter1.next()
...
>>> next(gen3())

哪个给了元组。但我需要在以下函数中应用相同的代码,该函数包含许多参数序列:

def generator_zip(seq1, seq2, *more_seqs):

如何在此函数中使用上述代码??

1 个答案:

答案 0 :(得分:2)

我认为itertools.product正是您所寻找的

import itertools

print list(itertools.product(range(3), range(4)))

>> [(0, 0), (0, 1), (0, 2), (0, 3), (1, 0), (1, 1), (1, 2), (1, 3), 
>> (2, 0), (2, 1), (2, 2), (2, 3)]

print list(itertools.product(range(2), range(3), range(4)))

>> [(0, 0, 0), (0, 0, 1), (0, 0, 2), (0, 0, 3), (0, 1, 0), (0, 1, 1), 
>> (0, 1, 2), (0, 1, 3), (0, 2, 0), (0, 2, 1), (0, 2, 2), (0, 2, 3), 
>> (1, 0, 0), (1, 0, 1), (1, 0, 2), (1, 0, 3), (1, 1, 0), (1, 1, 1), 
>> (1, 1, 2), (1, 1, 3), (1, 2, 0), (1, 2, 1), (1, 2, 2), (1, 2, 3)]

请注意,itertools函数始终返回生成器