您能否从chain()
对这两种方法chain.from_iterable
和itertools
进行更简单的解释?
我搜索了知识库以及python文档,但我感到困惑。
我是python的新手,这就是为什么我要求对这些进行更简化的解释。
谢谢!
答案 0 :(得分:3)
您可以将序列链接到一个序列:
>>> from itertools import chain
>>> a = [1, 2, 3]
>>> b = ['a', 'b', 'c']
>>> list(chain(a, b))
[1, 2, 3, 'a', 'b', 'c']
如果a
和b
在另一个序列中,而不是必须解压缩并将它们传递给chain
,您可以将整个序列传递给from_iterable
:
>>> c = [a, b]
>>> list(chain.from_iterable(c))
[1, 2, 3, 'a', 'b', 'c']
它通过迭代主序列的子序列来创建序列。这有时被称为展平列表。如果要平整列表列表,则必须自己编写代码。 Stack Overflow上有很多关于这方面的问题和答案。
答案 1 :(得分:0)
通过查看the docs,我们可以了解这两种工具之间的区别。
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
...
关键区别在于签名以及它们如何处理iterable,这是可以迭代或循环的东西。
chain
接受可迭代,例如"ABC", "DEF"
或[1, 2, 3], [7, 8, 9]
。chain.from_iterable
接受一个可迭代的,通常是嵌套的可迭代的,例如"ABCDEF"
或[1, 2, 3, 7, 8, 9]
。这有助于展平嵌套的迭代。请参阅itertools recipes。flatten
工具中的直接实施