为什么我的 zip 返回项目不能在 Python 中应用设置两次?

drb*_*mbe 1 python python-3.x

为了说明我的问题,这里是一个最小的代码。

x = [1,2,3]
y = ['a','b','c']
m = zip(x,y)
print(set(m))
print(set(m))
Run Code Online (Sandbox Code Playgroud)

我希望第二个print(set(m))会产生与第一个相同的结果print(set(m)),但这是我们得到的......

{(1, 'a'), (2, 'b'), (3, 'c')}
set()
Run Code Online (Sandbox Code Playgroud)

如果我们替换setto list,结果是一样的。关于为什么会发生这种情况的任何建议?

Ruf*_*sVS 5

从 Python 3 开始, zip 现在返回一个迭代器,而不是一个列表。

您的第一个 set 调用“展开”了 m 引用的迭代器(使用它)。

下次调用时为空。

要解决此问题,请使用

m=list(zip(x,y)).
Run Code Online (Sandbox Code Playgroud)