结合发电机

时间:2011-10-01 21:22:16

标签: python python-3.x

我有一个通过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)等)组合成一个生成器,然后可以由pickle使用。

很抱歉,如果我的问题充满了愚蠢,但我对发电机和泡菜都不熟悉...... 谢谢,

百里

1 个答案:

答案 0 :(得分: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)