-->

itertools的chain.from_iterable和链()的更简化的解释(More simp

2019-09-27 08:00发布

你可以给这两种方法更简单的解释chain()chain.from_iterableitertools

我已经搜索知识库,以及Python文档,但我弄糊涂了。

我是新来的蟒蛇,这就是为什么我问关于这些更简单的解释。

谢谢!

Answer 1:

你可以链序列使单个序列:

>>> from itertools import chain

>>> a = [1, 2, 3]
>>> b = ['a', 'b', 'c']
>>> list(chain(a, b))
[1, 2, 3, 'a', 'b', 'c']

如果ab是在另一个序列中,而不必打开包装并将其传递给chain您可以通过全序列from_iterable

>>> c = [a, b]
>>> list(chain.from_iterable(c))
[1, 2, 3, 'a', 'b', 'c']

它创建通过遍历您的主序列的子序列的序列。 这有时被称为扁平化的列表。 如果你想压平列表的列表清单,你必须代码自己。 有很多关于堆栈溢出的问题和答案。



Answer 2:

我们可以了解通过观察这两个工具之间的差异的文档 。

def chain(*iterables):
    # chain('ABC', 'DEF') --> A B C D E F
    ...

def from_iterable(iterable):
    # chain.from_iterable(['ABC', 'DEF']) --> A B C D E F
    ...

关键的区别是在签名,以及他们如何处理一个迭代 ,这恐怕是可以重复或循环结束。

  • chain接受iterables,如"ABC", "DEF"[1, 2, 3], [7, 8, 9]
  • chain.from_iterable接受一个可迭代,通常是一个可迭代嵌套,例如"ABCDEF"[1, 2, 3, 7, 8, 9] 这是一个扁平化嵌套iterables很有帮助。 看到它在直接执行flatten的发现工具itertools食谱 。


文章来源: More simplified explanation of chain.from_iterable and chain() of itertools