Python压缩行为-有人能解释一下吗[duplicate]

tjjdgumg  于 2023-01-10  发布在  Python
关注(0)|答案(1)|浏览(114)
    • 此问题在此处已有答案**:

Why can't I iterate twice over the same iterator? How can I "reset" the iterator or reuse the data?(6个答案)
12个月前关闭。
有人能解释一下为什么第4条print语句返回一个空列表吗?

x=[1]
y=[2]
z=zip(x,y)

print(z)
print(list(z))
print(z)
print(list(z))
print(list(zip(x,y)))

<zip object at 0x0000023F9382B688>
[(1, 2)]
<zip object at 0x0000023F9382B688>
[]
[(1, 2)]
nzk0hqpo

nzk0hqpo1#

编辑:前面的答案是“generator”而不是“iterator”,但是@juanpa.arrivillaga正确地指出了zip对象实际上是一个迭代器(从用户的Angular 看,它的工作原理基本上是一样的,但是没有相同的开销)
z是一个迭代器,你在print(list(z))中第一次使用它会耗尽它。你应该在第四个print语句之前重复z=zip(x,y)。注意,你在第三个print语句中仍然看到它是一个<zip object>,因为它只是一个耗尽的zip对象。第一次使用它不会耗尽它。

x = [1]
y = [2]
z = zip(x,y)    # zip object created, ready to yield values

print(z)        # print z, the object
print(list(z))  # exhaust z into a list, print the list
print(z)        # print z, the object (now exhausted)
print(list(z))  # try to exhaust z into a list again, nothing there, print []

试试这个:

x=[1]
y=[2]
z=zip(x,y)

print(z)
print(list(z))
print(z)
z=zip(x,y)
print(list(z))
print(list(zip(x,y)))

相关问题