带有迭代器的Python zip函数与可迭代

Yudhishthir Singh:

zip()传递迭代器而不是iterable时,我无法理解python中函数的工作方式

看一下这两个打印语句:

string = "ABCDEFGHI"

print(list(zip(*[iter(string)] * 3)))
# Output: [('A', 'B', 'C'), ('D', 'E', 'F'), ('G', 'H', 'I')]

print(list(zip(*[string] * 3)))
# Output: [('A', 'A', 'A'), ('B', 'B', 'B'), ('C', 'C', 'C'), ('D', 'D', 'D'), ('E', 'E', 'E'), ('F', 'F', 'F'), ('G', 'G', 'G'), ('H', 'H', 'H'), ('I', 'I', 'I')]

在这两种情况下,谁能向我解释zip()的工作原理

戈戈伦:

区别在于,对于[iter(string)] * 3zip创建单个迭代器的别名。对于[string] * 3zip每个参数创建唯一的迭代器。没有重复项的较短输出将zip耗尽单个别名迭代器。

看看python [iter(list)] * 2是什么意思?有关如何[iter(...)] * 2工作以及可能导致意外结果的更多详细信息

如果别名行为令人惊讶,请参阅规范答案。列表更改会在子列表中意外反映[...] * 3

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章