2011-10-01 54 views
2

我有一個函數,通過yield返回一個列表。我用這個功能如下:組合發電機

myList = [] 
for i in range(10): 
    myList = myList + list(myListGenerator(i)) 

pickleFile = open("mystuff.dat", "wb") 
pickle.dump(myList, pickleFile) 
pickleFile.close() 

我只是想知道這是否是酸洗數據的最有效的方式,或者如果我可以結合發生器(myListGenerator(0),myListGenerator(1),等等)放入一個發生器,然後可以被泡菜使用。

很抱歉,如果我的問題sonds愚蠢,但我是新來的兩臺發電機和泡菜...... 謝謝,

巴里

回答

7

您可以將發電機的結果(使用生成器表達式創建)到一個列表與itertools.chain.from_iterable

pickle.dump(list(itertools.chain.from_iterable(
       myListGenerator(i) for i in range(10))), pickleFile) 

或重寫發生器包括range內部調用,然後就去做

pickle.dump(list(myListGenerator(10)), pickleFile)