如何在Python中迭代列表时从列表中删除元素? [复制]

2023-12-03

给定一个数字列表:

L = [1, 2, 3, 4, 5]

当我迭代它时,如何从列表中删除一个元素(假设是 3)?

我尝试了以下代码,但没有成功:

for el in L:
    if el == 3:
        del el

最好的做法通常是建设性地进行——建立你想要的新项目列表,而不是删除那些你不需要的项目。例如。:

L[:] = [el for el in L if el != 3]

列表理解构建所需的列表并分配给“整个列表切片”,L[:],确保你是not只是重新绑定一个名称,但完全替换contents,因此效果与您想要执行的“删除”完全相同。这也很快。

如果你绝对,不惜一切代价,must相反,进行删除,一种微妙的方法可能会起作用:

>>> ndel = 0
>>> for i, el in enumerate(list(L)):
...    if el==3:
...      del L[i-ndel]
...      ndel += 1

没有哪个地方像 listcomp 方法那样优雅、干净、简单或性能良好,但它确实完成了这项工作(尽管乍一看它的正确性并不明显,事实上我在编辑之前就错了!-)。 “不惜一切代价”此处适用;-)。

对于“必须删除”的情况,用索引循环代替项目是另一种较差但可行的方法 - 但请记住reverse在这种情况下的索引...:

for i in reversed(range(len(L))):
  if L[i] == 3: del L[i]

事实上,这是一个主要用例reversed当我们争论是否添加内置功能时——reversed(range(...没有的话就不容易获得reversed,并且以相反的顺序循环列表有时很有用。另一种选择

for i in range(len(L) - 1, -1, -1):

真的很容易出错;-)。

尽管如此,我在这个答案开始时推荐的 listcomp 看起来越来越好,因为检查了替代方案,不是吗?-)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Python中迭代列表时从列表中删除元素? [复制] 的相关文章

随机推荐

  • 如何在 Palantir Foundry 中解析 xml 文档?

    我有一套 xml我想要解析的文档 我以前曾尝试使用获取文件内容并将它们转储到单个单元格中的方法来解析它们 但是我注意到这在实践中不起作用 因为我看到运行时间越来越慢 通常只有一项任务需要执行运行数十小时 我的第一个变换是 xml内容并将其放
  • 带有光标鼠标射线原点的 aframe 嵌入场景

    嵌入场景和鼠标光标选项似乎存在错误 cursor rayOrigin mouse 我在一个盒子上放置了 mouseenter 和 mouseleave 事件来改变它的大小 只要页面包含在浏览器中 它就可以正常工作 但是当页面 可滚动 时 事
  • 使用corona sdk的后台无限

    我正在尝试滚动 Corona sdk 中的背景 无限背景 我重复使用了两张图像 854x176 我尝试了这个功能 function mov self event if self x lt 854 then self x 854 else s
  • 是否可以从本机代码访问 Dalvik VM

    我希望能够使用 Android 中的本机代码来定位 Dalvik VM 这意味着使用中列出的本机类平台 dalvik在 android 源存储库下 我特别想打电话Sync dvmLockObject及其对应物Sync dvmUnlockOb
  • 没有数组的埃拉托斯特尼筛法?

    我必须为 埃拉托斯特尼筛 算法编写一个java代码 以便在控制台上打印出达到给定最大值的素数 但我不允许使用数组 我们的教授告诉我们 只有借助循环才能做到这一点 所以我想了很多 也用谷歌搜索了很多关于这个话题的信息 但找不到答案 我认为这根
  • 无法在 Javafx 应用程序中为 javascript 创建 javax 脚本引擎

    我正在使用 NetBeans 12 0 和 windows 10 64 位 我的 JDK 是 15 0 2 和 JavaFx SDK 16 当我尝试构建我的 javafx 应用程序时 它显示以下构建错误 C Users musta OneD
  • 来自 survfit 对象和 textConnection 的中值

    我使用了其他人的方法来获取中位数survfit对象 即使用textConnecton 但我遇到了几个问题 example library survival data cancer cox ph lt coxph Surv time stat
  • php循环遍历json数组

    我有一个像这样的 json 字符串 fields string fields customers name john id d1 name mike id d2 name andrew id d3 name peter id d4 如何打印
  • PHP 5.3 中的闭包内的 $this 是否有解决方法?

    我的 IDE 警告我 thisPHP 5 4 之前的闭包中不允许使用 是否有解决方法 无需从 5 3 10 升级 PHP 看fire 方法如下
  • 在 UIPageViewController 中禁用页面滚动[重复]

    这个问题在这里已经有答案了 我正在开发使用 UIPageViewController 的应用程序 现在我想禁用页面滚动而不是手势 实际上我想在 UIPageViewController 中包含的视图中绘制签名 为此我需要禁用页面滚动 我已经
  • 如何使用 WEB-INF/lib 中的服务器 jar 覆盖服务器 jar 或使用它们?

    我有一个Web应用程序应该使用WEB INF lib中包含的JSF 2 0库 但它没有 而不是我收到异常 因为我的服务器 JBoss 4 2 也提供了JSF库 我如何强制我的应用程序使用 WEB INF lib 中的 jar Note 当我
  • 在R中使用“unlink”后如何取回文件?

    我不小心删除了一些有用的文件 文件已被删除 我在回收站中找不到它们 我想知道怎样才能拿回来 我使用的是 Windows 8 1 我的文档中的所有文件都在R中使用unlink删除了 我尝试使用R delete来恢复 但它只能恢复从回收站删除的
  • 系统/应用程序中的 APK 何时安装?

    我创建了一个自定义系统映像 并将一个额外的 APK 放入系统 应用程序中 这有点有效 我可以运行该应用程序 但是本机库未加载 loadLibrary 失败 当我打电话时pm install在 APK 上 一切正常并且本地库加载 我的结论是
  • 返回回调(从 CustomView 中打开 DialogFragment)

    这与我之前的问题有关 从 CustomView 中打开 DialogFragment 我现在需要使用回调从 DialogFragment 返回一个值 据我了解 通常会这样做 public class MyDialogFragment ext
  • 如何在乌龟中创建按钮?

    如何在turtle python中创建一个简单的按钮 如果单击它 您可以定义它来打印消息 或者做其他更复杂的事情 You can embed正如 JoshuaNixon 在他的评论中建议的那样 tkinter 中的海龟使用 tkinter
  • 微风过滤。在服务器端扩展

    我正在尝试BreezeJS 有一个要求我可以使用 expand在客户端代码中 但基于role对于该用户 服务器端不会返回该用户的所有记录 expand请求的类型 我尝试创建一个自定义BreezeQueryable属性并重写一个方法来完全过滤
  • PHP:如何发送HTTP响应代码?

    我有一个 PHP 脚本 需要使用 HTTP 响应代码 状态代码 进行响应 例如 HTTP 200 OK 或某些 4XX 或 5XX 代码 我怎样才能在 PHP 中做到这一点 我刚刚发现这个问题并认为它需要更全面的答案 As of PHP 5
  • 自动解决主键合并冲突

    你能建议我自动解决的方法吗 发布者和订阅者之间合并期间的主键冲突 看来 Sql Server 并没有开箱即用 冲突查看器向我显示下一条消息 在 publisher server 处插入的行无法传播到 subscriber server 此失
  • 使用 Hibernate 通过 SSH 隧道获取数据

    最近开始学习Hibernate技术 要使用Hibernate从数据库中获取数据 问题是我只能通过 SSH 隧道连接到数据库 有没有我可以使用的属性hibernate cfg xml文件来解决这个问题 或者您可以提出另一种新手可以理解的方法
  • 如何在Python中迭代列表时从列表中删除元素? [复制]

    这个问题在这里已经有答案了 给定一个数字列表 L 1 2 3 4 5 当我迭代它时 如何从列表中删除一个元素 假设是 3 我尝试了以下代码 但没有成功 for el in L if el 3 del el 最好的做法通常是建设性地进行 建立