以下代码:
coords = zip([0], [0])
for a, b in list(coords):
print("{}, {}".format(a, b))
按预期输出0, 0
。但是下面的代码:
coords = zip([0], [0])
mylist = list(coords)
for a, b in list(coords):
print("{}, {}".format(a, b))
不输出任何内容。为什么会这样呢?
Python版本:
Python 3.6.3 |Anaconda, Inc.| (default, Oct 13 2017, 12:02:49)
[GCC 7.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
答案 0 :(得分:4)
因为zip
返回一个迭代器,这意味着一旦对其进行迭代,它就会耗尽,并且无法再次对其进行迭代。
当您将其设为list
时,您的第一次迭代就完成了:
mylist = list(coords)
# At this point coords has been exhausted, so any further `__next__` calls will just raise a `StopIteration`
当您尝试使用for
循环对其进行遍历时,它不再产生任何项目,因为没有其他可返回的内容。一切都已使用list
进行了迭代。
为了使for
循环正常工作,您需要执行以下任一操作:
mylist
(即list
)上进行循环,因此它保留了项目的索引(可以随机访问),这意味着您可以遍历所有元素多次想要。zip([0], [0])
,以获得一个新的迭代器。