码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-02-09 15:07:41      阅读:548      评论:0      收藏:0      [点我收藏+]

标签:才有   变化   原来   运行   pytho   列表   循环   dex   对象   

先放一个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正确做法

标签:才有   变化   原来   运行   pytho   列表   循环   dex   对象   

原文地址:https://www.cnblogs.com/zdwu/p/8434623.html

(0)
(1)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!