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

对比两个列表元素,删除list1中首元素不在list2内的子项的实现方法

过滤列表的实现方法

核心需求为保留list1中首元素存在于list2中的子项。多数循环写法出错的原因是正序遍历原列表时直接删除元素,删除操作会让列表长度变短、后续元素索引前移,导致部分元素被跳过漏判。

1. 列表推导式(最简洁,推荐)

先把list2转成集合可将in查询的时间复杂度从O(n)降到O(1),数据量大时性能提升明显:

# 补全原列表语法缺失的逗号
list1 = [[1, 0.5], [2, 0.8], [3, 0.9], [4, 0.8], [5, 0.7]]
list2 = [1, 2, 5]

filter_set = set(list2)
result = [item for item in list1 if item[0] in filter_set]

print(result)
# 输出:[[1, 0.5], [2, 0.8], [5, 0.7]]

2. 显式for循环实现

如果需要写完整循环逻辑,建议新建空列表存储符合条件的元素,避免修改原列表导致的索引问题:

filter_set = set(list2)
result = []
for item in list1:
    if item[0] in filter_set:
        result.append(item)

3. 原列表上修改的写法

如果必须直接修改原list1而不是生成新列表,需要倒序遍历索引:

filter_set = set(list2)
# 从最后一个索引往前遍历,删除元素不会影响未遍历的索引位置
for i in range(len(list1)-1, -1, -1):
    if list1[i][0] not in filter_set:
        del list1[i]
# 此时list1就是过滤后的结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 17:27:02