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

高效提取共享ID的两个实例列表中目标元素的算法问询

优化跨列表匹配ID的算法,提升大数据量下的性能

这问题我太熟了!你当前的实现之所以在数据量大的时候跑得慢,核心原因是列表的in操作是线性遍历——每次检查line.ID in IDs_listB都要把IDs_listB从头到尾扫一遍,时间复杂度直接拉到O(N*M),数据量上去后肯定卡得不行。

最优解决方案:用集合(Set)替代列表存储ID

集合的成员查询平均时间复杂度是O(1),把listB的ID转成集合后,整体时间复杂度会降到O(N+M)(M是转集合的时间,N是遍历listA的时间),性能提升非常明显。

修改后的代码如下:

# 把listB的ID转成集合,O(M)时间
id_set_b = {instance.ID for instance in listB}
out_tab = []
# 遍历listA,每次查询都是O(1),整体O(N)时间
for instance_a in listA:
    if instance_a.ID in id_set_b:
        out_tab.append(instance_a)

额外优化:用列表推导式简化代码

如果代码风格允许,还可以用列表推导式把遍历和筛选一步完成,更简洁:

id_set_b = {instance.ID for instance in listB}
out_tab = [instance_a for instance_a in listA if instance_a.ID in id_set_b]

补充说明

  • 如果listB里存在重复的ID,转成集合会自动去重,但这不影响结果——我们只需要判断ID是否存在,重复ID不影响匹配逻辑。
  • 要是之后需要关联ClassB的其他属性(比如之后ClassB加了新字段),可以把集合换成字典({instance.ID: instance for instance in listB}),这样既能快速查询,又能直接拿到对应的ClassB实例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:10:13