组合生成器

2 投票
1 回答
548 浏览
提问于 2025-04-17 03:30

我有一个函数,它通过“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 来处理。

抱歉如果我的问题听起来很傻,但我对生成器和 pickle 都很陌生……

谢谢,

巴里

1 个回答

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)

撰写回答