gpt4 book ai didi

python - 理解 zip 函数

转载 作者:太空狗 更新时间:2023-10-29 17:17:47 24 4
gpt4 key购买 nike

所有讨论都是关于 python 3.1.2;见Python docs对于我的问题的来源。

我知道 zip 的作用;就是不明白为什么可以这样实现:

def zip(*iterables):
# zip('ABCD', 'xy') --> Ax By
iterables = map(iter, iterables)
while iterables:
yield tuple(map(next, iterables))

假设我调用了 zip(c1, c2, c3)。如果我理解正确的话,iterables 最初是元组 (c1, c2, c3)。

iterables = map(iter, iterables) 行将其转换为一个迭代器,如果遍历,该迭代器将返回 iter(c1)、iter(c2)、iter(c3)。

在循环内部,map(next, iterables) 是一个迭代器,它将返回 next(iter(c1))next(iter(c2) )next(iter(c3)) 如果迭代。 tuple 调用将其转换为 (next(iter(c1)), next(iter(c2)), next(iter(c3)),耗尽其参数 (iterables) 据我所知,在第一次调用时。我不明白 while 循环如何设法继续,因为它检查了 iterables; 如果它确实继续,为什么 tuple 调用不返回空元组(迭代器已耗尽)。

我确定我遗漏了一些非常简单的东西..

最佳答案

看起来这是文档中的错误。 “等效”代码在 python2 中有效,但在 python3 中无效,它进入无限循环。

而且最新版本的文档也有同样的问题:http://docs.python.org/release/3.1.2/library/functions.html

看起来像变化61361是问题所在,因为它合并了 python 2.6 的更改,但没有验证它们是否适用于 python3。

看起来这个问题在 trunk 文档集中不存在,但你可能应该在 http://bugs.python.org/ 报告一个关于它的错误。 .

关于python - 理解 zip 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3865640/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com