你可以给这两种方法更简单的解释chain()
和chain.from_iterable
从itertools
?
我已经搜索知识库,以及Python文档,但我弄糊涂了。
我是新来的蟒蛇,这就是为什么我问关于这些更简单的解释。
谢谢!
你可以给这两种方法更简单的解释chain()
和chain.from_iterable
从itertools
?
我已经搜索知识库,以及Python文档,但我弄糊涂了。
我是新来的蟒蛇,这就是为什么我问关于这些更简单的解释。
谢谢!
你可以链序列使单个序列:
>>> 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']
它创建通过遍历您的主序列的子序列的序列。 这有时被称为扁平化的列表。 如果你想压平列表的列表清单,你必须代码自己。 有很多关于堆栈溢出的问题和答案。
我们可以了解通过观察这两个工具之间的差异的文档 。
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食谱 。