2014-01-24 56 views
-1

我必須生成一個函數,它可以接收任意數量的序列並返回元組列表。 我曾嘗試編寫代碼通過使用下面的代碼從列表中產生通過生成的元組逐一:Python-用於返回序列的生成器

>>> 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

順便說一句,你用了「植酮」在你已經每一個問題問,並且從來沒有添加[python]標籤。這種語言被稱爲「Python」,而不是「Phyton」,如果你沒有正確標記,你將很難得到幫助。 – geoffspear

+1

您有重新發明此功能的原因嗎?它已經存在於'itertools.izip'中。 –

+0

這看起來更像itertools.product比itertools.izip –

回答

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函數總是返回發電機

+0

我不能使用itertools函數,但我可以使用izip實現。但,不能得到它。@ Icfseth – Ramya

+0

它實際上並不是很難。 A×B×C =(A×B)×C = AB×C = ABC。通過使用迭代方法,您可以將前兩個列表合併到一個列表中,直到您擁有一個列表爲止 –

+0

我認爲iZip在C中以速度實現,您不會找到它的python代碼。 –