您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python-从列表中删除项目时出现奇怪的结果

Python-从列表中删除项目时出现奇怪的结果

在遍历列表时,你正在修改它。这意味着第一次遍历循环时,i==1,因此1从列表中删除。然后for循环转到列表中的第二项,不是2,而是3!然后从列表中删除,然后for循环转到列表中的第三项,现在是5。等等。也许这样更容易想象,用^表示i的值:

[1, 2, 3, 4, 5, 6...]
 ^

最初是列表的状态;然后删除1,然后循环转到列表中的第二项:

[2, 3, 4, 5, 6...]
    ^
[2, 4, 5, 6...]
       ^

等等。

在迭代列表时,没有很好的方法来更改列表的长度。你可以做的最好的事情是这样的:

numbers = [n for n in numbers if n >= 20]

或这样,就地更改(parens中的内容一个生成器表达式,在切片分配之前隐式转换为元组):

numbers[:] = (n for in in numbers if n >= 20)

如果要在删除n之前对n执行操作,可以尝试的一种技巧是:

for i, n in enumerate(numbers):
    if n < 20 :
        print "do something" 
        numbers[i] = None
numbers = [n for n in numbers if n is not None]
python 2022/1/1 18:19:08 有462人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶