我在互联网上找不到任何有效的示例,可以看到它们之间的区别以及为什么要选择一个而不是另一个。

最佳答案

第一个带有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/

10-12 14:14