我在互联网上找不到任何有效的示例,可以看到它们之间的区别以及为什么要选择一个而不是另一个。
最佳答案
第一个带有0个或多个参数,每个参数都是可迭代的,第二个带有一个参数,该参数有望产生可迭代的:
from itertools import chain
chain(list1, list2, list3)
iterables = [list1, list2, list3]
chain.from_iterable(iterables)
但是
iterables
可以是产生可迭代对象的任何迭代器:def gen_iterables():
for i in range(10):
yield range(i)
itertools.chain.from_iterable(gen_iterables())
使用第二种形式通常是方便的情况,但是由于它懒惰地遍历输入可迭代对象,因此这也是链接无限数量的有限迭代器的唯一方法:
def gen_iterables():
while True:
for i in range(5, 10):
yield range(i)
chain.from_iterable(gen_iterables())
上面的示例将为您提供一个可迭代的迭代器,该迭代器将产生一个循环的数字模式,该模式将永远不会停止,但永远不会消耗比单个
range()
调用所需的内存更多的内存。关于python - itertools中的chain和chain.from_iterable有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15004772/