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

如何根据另一个列表中的ID删除列表中的对象?

这其实是Python里很常见的对象过滤场景,我给你几种实用的实现方式,都能完美解决你的需求:

方法1:列表推导式(推荐,简洁又高效)

首先建议把ID_list转换成集合——因为集合的成员检查速度比列表快得多,尤其是当ID数量较多的时候,能大幅提升效率。然后用列表推导式生成新的过滤后的列表:

# 先把ID列表转成集合,优化查找效率
ID_set = set(ID_list)
# 生成新列表,只保留ID不在目标集合里的对象
Obj_list = [obj for obj in Obj_list if obj.ID not in ID_set]

针对你的示例场景:ID_list = [45,56,78,11],Obj_list里的x1.ID=45(在集合中)会被过滤掉,x2.ID=46不在集合里会被保留,最终Obj_list就只剩[Node.node at x2],完全符合预期。

方法2:原地修改原列表(适合不想创建新列表的场景)

如果你不想生成新列表,想直接在原列表上删除元素,记得要从后往前遍历——因为如果正向遍历的话,删除元素会导致列表长度变化,后面的元素索引错位,容易漏删或者报错:

ID_set = set(ID_list)
# 反向遍历原列表
for obj in reversed(Obj_list):
    if obj.ID in ID_set:
        Obj_list.remove(obj)

这种方式会直接修改原Obj_list,最终效果和方法1一致。

小提示

不管用哪种方法,都优先把ID_list转成集合,因为obj.ID in ID_set的时间复杂度是O(1),而obj.ID in ID_list是O(n),当ID数量多的时候,性能差距会非常明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 16:02:33