千家信息网

python迭代列表中删除项目问题的示例分析

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章将为大家详细讲解有关python迭代列表中删除项目问题的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。问题:有这段代码:numbers = rang
千家信息网最后更新 2026年11月01日python迭代列表中删除项目问题的示例分析

这篇文章将为大家详细讲解有关python迭代列表中删除项目问题的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

问题:

有这段代码:

numbers = range(1, 50) for i in numbers:    if i < 20:        numbers.remove(i) print(numbers)

但得到的结果是:

[2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49]

当然,希望低于 20 的数字不会出现在结果中。看起来在删除时做错了什么。

解决方法

在迭代列表时正在修改列表。这意味着第一次通过循环,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]

或者这个,对于就地更改(括号中的东西是一个生成器表达式,它在切片赋值之前被隐式转换为一个元组):

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

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

for i, n in enumerate(numbers):    if n < 20 :        print("do something")        numbers[i] = Nonenumbers = [n for n in numbers if n is not None]

关于"python迭代列表中删除项目问题的示例分析"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

迭代 循环 问题 篇文章 示例 项目 分析 方法 更多 结果 不错 实用 依此类推 东西 事情 代码 内容 就是 形象 意味 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网新科技 湖北九亚互联网络科技有限公司 湖南永感互联网科技有限公司 互联网科技缩写 科技互联网公司logo 互联网科技咨询 居家互联网科技有限公司 互联网科技股午盘股票涨跌 滨湖区互联网智能科技产品供应 互联网科技寓意 金融科技与互联网金融相同和不同 受益于互联网科技的高速发展 港股科技和互联网 湖北码尼互联网科技有限公司电话 宜昌元轩互联网科技有限公司 呼和浩特新华互联网科技学院 爱医互联网络科技 元气玛特互联网科技公司是外包吗 云鲸互联网络科技有限公司 亚光科技低轨卫星互联网 互联网科技官网 互联网 卓越科技 狮子座互联网科技有限公司 科技互联网创业计划书 科技与互联网哪个更好 互联网企业和科技型企业 崇明区互联网教育科技诚信经营 佛山市拉法互联网科技有限公司 无锡工业互联网科技有限公司 互联网对科技影响
0