python - 在 Python 中从序列中删除项目的优雅方法?

标签 python optimization set series

当我在 Python 中编写代码时,我经常需要根据某些条件从列表或其他序列类型中删除项目。我还没有找到优雅高效的解决方案,因为从您当前正在迭代的列表中删除项目是不好的。例如,您不能这样做:

for name in names:
    if name[-5:] == 'Smith':
        names.remove(name)

我通常会做这样的事情:

toremove = []
for name in names:
    if name[-5:] == 'Smith':
        toremove.append(name)
for name in toremove:
    names.remove(name)
del toremove

这是低效的,相当丑陋的并且可能有错误(它如何处理多个“John Smith”条目?)。有没有人有更优雅的解决方案,或者至少是更有效的解决方案?

使用字典的那个怎么样?

最佳答案

完成过滤的两种简单方法是:

  1. 使用过滤器:

    names = filter(lambda name: name[-5:] != "Smith", names)

  2. 使用列表推导:

    names = [name for name in names if name[-5:] != "Smith"]

请注意,这两种情况都会保留谓词函数评估为 True 的值,因此您必须颠倒逻辑(即您说“保留不姓史密斯的人”而不是“删除姓史密斯的人”)。

编辑有趣...两个人分别发布了我在发布我的建议时提出的两个答案。

关于python - 在 Python 中从序列中删除项目的优雅方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18418/

相关文章:

python - 将同一对象两次添加到 ManyToManyField

python - Scikit 学习高斯 HMM : ValueError: startprob must sum to 1. 0

c# - 用于在字符串列表 C# 中查找字符串匹配的最佳比较算法

python - 错误优化器参数在 Keras 函数中不合法

python - 在 Python 中查找图像像素和调色板颜色之间差异的最快方法

python - 查找具有共同元素的元组

python - 如何读取文本文件并将其逐字写入python中的另一个文件?

Python - 使用 mailto 打开默认邮件客户端,有多个收件人

java - 将一组 Activity 传递给另一项 Activity 的最佳方式是什么? Java 安卓 SDK

java - 从 HashMap 获取最大 Set 大小