社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
私信  •  关注

Yassin Julian

Yassin Julian 最近创建的主题
Yassin Julian 最近回复了
4 年前
回复了 Yassin Julian 创建的主题 » IF语句给出错误的结果python[duplicate]

您正在修改列表,同时对其进行迭代。这意味着第一次通过循环, i == 1 ,因此1从列表中删除。然后 for 循环转到列表中的第二项,它不是2,而是3!然后从列表中删除,然后 对于 循环转到列表中的第三项,现在是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之前对其执行操作,可以尝试以下技巧:

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]