新手学习PYTHON,为什么这个程序只能迭代循环一次啊?

pigfish 2015-11-10 10:18:36
代码:

dataSet = [ [1], [2],[3]]
D = map( set, dataSet )
for i in D:
print ( i )
for i in D:
print ( i )

运行结果:
{1}
{2}
{3}


第2次怎么就不能迭代了呢?
...全文
284 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
缪芮珂 2019-10-27
  • 打赏
  • 举报
回复
因为map()函数的返回对象不一样
Python 2.x 返回列表。
Python 3.x 返回迭代器。
所以你用3.4的版本就只能迭代一次了
冷风1023 2019-01-19
  • 打赏
  • 举报
回复
之所以会这样,原因在于:遍历完最后一个元素后,再次访问时会放回空列表。我们也可以这样理解:由于python中“没有指针,但是所有对象均为指针”,完成一次遍历后指针会移到最后一个元素上了。也就是说,D是一个map object,print(list(D))或者for循环打印D中的元素,都会导致迭代器从头走到尾(可以类比list[0]到list[n])。 而迭代器是一个单向的容器,走到尾部之后,不会自动再回到开始位置。 所以,对Map对象进行一次for循环之后,Map就相当于“空”了。

想要二次遍历(访问)Map对象,这里有一种方法可供参考:

------在第一次遍历Map对象之前,先复制拷贝一份,但此时的拷贝需要是深拷贝才行。
---------------------
作者:swety_gxy
来源:CSDN
原文:https://blog.csdn.net/swety_gxy/article/details/83063499
版权声明:本文为博主原创文章,转载请附上博文链接!
这里有解释。
  • 打赏
  • 举报
回复
for循环是基于迭代器协议
pigfish 2015-11-10
  • 打赏
  • 举报
回复
我python版本是V3.4, 很多V2的程序都要调整,很奇怪啊
  • 打赏
  • 举报
回复
我这里可以啊 两次


>>> 
set([1])
set([2])
set([3])
set([1])
set([2])
set([3])

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧