鱼C论坛

 找回密码
 立即注册
查看: 1442|回复: 3

[已解决]求助个for in的问题

[复制链接]
发表于 2017-8-25 14:45:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
新手,想把list1里面的两个a都去掉,但是list1的结果为['a'],还剩下一个a没去掉。调试走了一下,发现第一次remove后,接下来的for没进去。版主能帮忙看看嘛?谢谢了
  1. list1 = ['a','a']
  2. for value in list1:
  3.     if value=='a':
  4.         list1.remove(value)
  5. print(list1)
复制代码
最佳答案
2017-8-25 15:26:59
本帖最后由 wei_Y 于 2017-8-25 15:31 编辑

迭代的同时操作这个列表是很危险的事情。

一般来说可以这样:
  1. for i in list1[:]:
  2. ....
复制代码


还可以这样:
  1. for i in range(list1.count()):
  2.     list1.remove('a')
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-8-25 15:26:59 | 显示全部楼层    本楼为最佳答案   
本帖最后由 wei_Y 于 2017-8-25 15:31 编辑

迭代的同时操作这个列表是很危险的事情。

一般来说可以这样:
  1. for i in list1[:]:
  2. ....
复制代码


还可以这样:
  1. for i in range(list1.count()):
  2.     list1.remove('a')
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-25 15:38:49 | 显示全部楼层
wei_Y 发表于 2017-8-25 15:26
迭代的同时操作这个列表是很危险的事情。

一般来说可以这样:

好的 明白了 谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-25 16:03:58 | 显示全部楼层
本帖最后由 jbr 于 2017-8-25 16:05 编辑

我也是新手,我试着分析一下,先做个测试:
  1. for i in []:
  2.     print(1)
复制代码

结果是这个循环没执行,也就是说for循环不能在空列表中运行

再做第二个测试:
  1. list1 = ['a','a','a']
  2. for value in list1:
  3.     if value=='a':
  4.         list1.remove(value)
  5.         print(list1)
复制代码

给list1增加一个元素,每次循环打印出list1,结果为:
['a', 'a']
['a']
该结果表明,list1执行两次循环,第三次没有执行
于是可以推测,当第三次循环执行的时候list1会由单元素变为空列表,这时,for循环会把list1按照空列表对待,导致程序在第三次循环时中断。

因此可以增加一个对照列表list2,循环时for按照list2走,但修改的只是list1
  1. list1 = ['a','a']
  2. list2 = list1[:]
  3. for value in list2:
  4.     if value=='a':
  5.         list1.remove(value)
  6. print(list1)
复制代码


其实这也就是2楼版主的答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-26 16:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表