今天学习的时候无意发现了这个问题:
代码如下:
constellation=['A','B','C','D']
nature=['1','2','3','4']
y=zip(constellation,nature)
print(y,type(y))
for i in y:
print(i,type(i))
print('-----------------------')
d=dict(y)
e=dict(zip(constellation,nature))
print(d)
print(e)
按说d和e的结果应该是一样的,因为y=zip(constellation,nature)
但是结果d=dict(y)却是空字典,结果如下:
{}
{'A': '1', 'B': '2', 'C': '3', 'D': '4'}
但是如果我把for in 循环拿掉的时候结果又变成了下面这种:
{'A': '1', 'B': '2', 'C': '3', 'D': '4'}
{'A': '1', 'B': '2', 'C': '3', 'D': '4'}
所以问题应该是出在了for in循环那边
for in 遍历了y,然后y就空了? 这是为神魔?
应该是这样
zip 返回了一个迭代器
迭代完了,就空了。
zip()返回的是迭代对象,迭代对象只能遍历一次,
迭代对象遍历了一次之后内部的迭代指针指向最后一个元素之后,
第二次遍历时从上次迭代指针指向的位置(最后一个元素之后)开始遍历,自然就没有了.
用list()转成列表就可以多次遍历了
y=zip(constellation,nature)
改成
y=list(zip(constellation,nature))
constellation=['A','B','C','D']
nature=['1','2','3','4']
y=list(zip(constellation,nature)) #用list()转成列表就可以多次遍历了
print(y,type(y))
for i in y:
print(i,type(i))
print('-----------------------')
d=dict(y)
e=dict(zip(constellation,nature))
print(d)
print(e)
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!