组合生成器
我有一个函数,它通过“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)