霄汉景行 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 关于#hadoop#的问题
  • ¥15 (标签-Python|关键词-socket)
  • ¥15 keil里为什么main.c定义的函数在it.c调用不了
  • ¥50 切换TabTip键盘的输入法
  • ¥15 可否在不同线程中调用封装数据库操作的类
  • ¥15 微带串馈天线阵列每个阵元宽度计算
  • ¥15 keil的map文件中Image component sizes各项意思
  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据