pythonforloop中zip对象的使用

2024-09-29 19:24:03 发布

您现在位置:Python中文网/ 问答频道 /正文

在for循环中,zip对象是否只能作为对象本身使用?在

我希望我能得到一些解释,为什么其他类型(比如variable,list)在实际上是同一事物时不能使用。在

x = [1, 2, 3]
y = ['a', 'b', 'c']
​
obj1 = zip(x, y)
odj2 = list(zip(x, y))

​# working properly
for a, b in zip(x, y):
    print(a)
    print(b)     

# doesn't work and don't know why
for a, b in obj1:
    print(a)
    print(b)     

for a, b in obj2:
    print(a)
    print(b)  

那么,在for循环中,我是否必须使用zip对象作为自身的zip函数呢?在

提前谢谢你!在


Tags: 对象in类型forzipvariablelistworking
1条回答
网友
1楼 · 发布于 2024-09-29 19:24:03

如果您从一开始就运行所提供的代码,它就可以工作(除了odj2应该是obj2)。在

混淆的原因是zip对象是一个迭代器。它不在内存中存储元素,而是根据需要动态生成它们。您不能访问以前的元素或重新启动迭代器;相反,您必须构造一个新的迭代器。因此,如果您发现自己需要多次迭代这些序列,那么应该将它们转换为持久数据结构,例如lists。例如:

x = [1, 2, 3]
y = ['a', 'b', 'c']

zip_object = zip(x, y)

print('first time:')

for first, second in zip_object:
    print(first, second)

print('second time:')

for first, second in zip_object:
    print(first, second)

print('done')

输出:

^{pr2}$

与使用zip对象创建list的情况相比:

^{3}$

输出:

first time
1 a
2 b
3 c
second time
1 a
2 b
3 c
going back to the zip object
done

所发生的是,您在某个地方迭代了obj1,然后在没有创建新的zip对象的情况下,再次尝试遍历它。由于已经完全耗尽,for循环没有可迭代的内容。在

相关问题 更多 >

    热门问题