You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何根据对象属性值删除列表中的指定对象

Python实现:移除列表中指定属性符合条件的自定义类实例

问题场景

现有自定义类MyClass,以及存储其实例的列表myList,相关定义如下:

class MyClass():
    def __init__(self, name, att1, att2):
        self.name = name
        self.att1 = att1
        self.att2 = att2

myList = [MyClass("p1", 1, 1), MyClass("p2", 0, 0), MyClass("p3", 0, 1)]

需要移除列表中所有满足att2 == 1条件的实例。

推荐实现方案

  • 列表推导式(优先选用)
    这是最简洁、可读性最高、执行效率最优的方案,直接通过过滤条件生成新列表覆盖原变量即可,不会出现遍历过程中动态修改列表导致的索引错位问题:
myList = [obj for obj in myList if obj.att2 != 1]
  • 原地修改原列表(适配需要保留原列表引用的场景)
    如果有其他变量已经绑定了myList的引用,不能替换成新列表对象,可以用以下两种方式原地修改:
# 方式A:切片赋值,把过滤后的内容直接写入原列表内存空间
myList[:] = [obj for obj in myList if obj.att2 != 1]

# 方式B:倒序遍历删除,避免正序删除时元素前移导致的漏删问题
for idx in range(len(myList) - 1, -1, -1):
    if myList[idx].att2 == 1:
        del myList[idx]

避坑提醒

禁止直接正序遍历原列表同时执行删除操作,这种写法会因为列表长度动态收缩、元素索引前移,漏删部分符合条件的元素,属于常见低级错误:

# 错误写法示例,会漏删元素
for obj in myList:
    if obj.att2 == 1:
        myList.remove(obj)

结果验证

过滤完成后遍历列表打印实例名称,可验证只剩符合条件的p2实例:

for item in myList:
    print(item.name)
# 输出:p2

内容的提问来源于stack exchange,提问作者ChrisLearnsCoding

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 23:51:16