list()连续两次应用于zip对象

Mil*_*vic 5 python zip list python-3.x

我已经构建了一个zip对象,并且偶然地我注意到,如果我两次将list()应用于此对象,第二次它将产生[]。我的代码如下所示:

coordinate = ['x', 'y', 'z']
values = [5, 7, 9]

my_map = zip(coordinate, values)

my_map_list_first = list(my_map)
my_map_list_second = list(my_map)

print(my_map_list_first)
print(my_map_list_second)
Run Code Online (Sandbox Code Playgroud)

代码输出为:

[('x', 5), ('y', 7), ('z', 9)]
[]
Run Code Online (Sandbox Code Playgroud)

我是Python的新手,所以我的术语可能不是100%准确的。我尝试过在线查找解释,但是这里的问题是实际的问题是什么。(好问题让他回答了一半)。由于我仍在学习Python,所以我可能不知道该问些什么。

我也尝试使用在另一个主题中看到的那个Python模拟器: http ://www.pythontutor.com/visualize.html#mode=display但我只看到了我所知道的-my_map_list_second是[],而不是确切的含义在引擎盖下。有人可以解释这里发生了什么吗?同时也为我指出了有关“相似”问题的正确方向,尽管我相信随着我使用Python的进行,这些问题会随着时间的流逝而变得清晰起来。

这也是我在这些论坛上的第一个端口。提前致谢。

Exp*_*ish 6

zip返回generator,而不是listgenerator只运行一次,因此您需要zip再次调用my_map_list_second


Flo*_*ard 5

您正在寻找关于发电机的awnser

事实上,zip将创建一个generator,直到你iterate尝试过它才成为过程,list在你的例子中使用。另一个重要的性质是,generator只能是iterate once

最后一个属性解释了为什么你第二次得到空列表。