【发布时间】:2020-12-24 21:26:57
【问题描述】:
m = ['a', 'b', 'c', 'd']
n = list(range(1,5))
l = zip(m,n)
x = list(l)
print(x)
print(list(l))
第二个print 是一个空列表。为什么?
为什么不能得到与第一个 print 相同的输出?
【问题讨论】:
-
在 Python 3 中
zip对象是生成器。一旦使用它们就会耗尽。 -
具体来说,
x = list(l)耗尽了生成器l。然后,当你尝试重用l时,你得到的数据什么都没有。如果最后一行是print(list(zip(m, n))),它可以工作,因为那将是一个 new 生成器。有关更多详细信息,请参阅此问题所针对的骗子。 -
zip() 返回一个迭代器,更像是在遍历循环时使用索引。在循环之外,您无法访问索引/迭代器。有关更多信息和示例,您可以阅读文档 -docs.python.org/3.3/library/functions.html#zip