python 删除正在for循环遍历的list正确做法

Posted 吴增丁

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 删除正在for循环遍历的list正确做法相关的知识,希望对你有一定的参考价值。

先放一个python遍历发生的异常:

1 ls =[1,2,3,4,5,6,7,8,9]
2 for i in ls:
3     print("i",i)
4     print("ls",ls)
5     ls.remove(i)

运行结果:

i 1
ls [1, 2, 3, 4, 5, 6, 7, 8, 9]
i 3
ls [2, 3, 4, 5, 6, 7, 8, 9]
i 5
ls [2, 4, 5, 6, 7, 8, 9]
i 7
ls [2, 4, 6, 7, 8, 9]
i 9
ls [2, 4, 6, 8, 9]

 我期待的是遍历从1~9一个不落,但是每次都跳过一个元素,这让我很意外,好奇,也很纳闷?

 原来for 循环在遍历的时候,遍历的对象也是动态的,不是我之前认为的一旦开始遍历ls = [1,2,3,4,5,6,7,8,9],这个list就固定了。

     不是这样的!!

    这就是很好的例子!

    我思考猜测的原因:

    在for循环遍历对象时,也是会根据 list 的元素个数进行遍历,如果你对list本身删除了一个元素,元素个数就发生了变化,相当于整个列表向左移动一位,可是这时候index是按照1——>2——>3的方式依次,这样相当于遍历的元素跳过了一位,才有了开始的异常错误。

以上是关于python 删除正在for循环遍历的list正确做法的主要内容,如果未能解决你的问题,请参考以下文章

如何正确遍历删除List中的元素(普通for循环增强for循环迭代器iteratorremoveIf+方法引用)

python3 list 使用 for 遍历,边循环边删除问题

Python的list循环遍历中,删除数据的正确方法

Python列表list操作-遍历查找增加删除修改排序

正确在遍历中删除List元素

遍历list删除元素