霄汉景行 2018-11-30 12:14 采纳率: 100%
浏览 779
已结题

Python对列表中元素进行删除时,出现了一个非常奇怪的事情,求各位大佬解惑。

 lst=[1,2,2,12.8,'a','a','列表',2,'python',(2,'c'),{'name':'tom','age':18},'',True,[1,'a',3],{1,3,'a'}]

for i in lst:
    if i == 2:
        lst.remove(i)


使用for循环删除lst中的2,但是运行结果是:


[1, 12.8, 'a', 'a', '列表', 2, 'python', (2, 'c'), {'name': 'tom', 'age': 18}, '', True, [1, 'a', 3], {1, 'a', 3}]

为什么 元素 '列表' 后边的2,没有被删除?求各位大神解惑。

  • 写回答

6条回答 默认 最新

  • qq_22993395 2018-11-30 12:27
    关注

    remove只删除第一个匹配的元素啊!删了一个结束了,不会删后面的。而且你这个循环遍历是没有意义的。就相当于执行了remove(2)

    考虑下面的代码:

    k = 0
    for i in range(0, len(lst)-1-k):
        if (lst[i] == 2):
                del lst[i]
                    k++
    

    在遍历中删除时比较危险的,列表长度会随着改变,如果不加记录删除个数的k,就会indexOutOfBound
    当然这样写很土。。。如果有人有更简便的方法就更好了

    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题