2011-10-01 66 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)