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

如何使用一个列表过滤另一个列表并提取两列表的交集?

嘿,这个需求很常见,我给你整理了几种实用的解决思路,适配不同的场景需求:

方法1:用集合交集(最简洁高效)

Python的集合天生支持交集操作,这是处理这类问题最常用的方式,代码非常清爽:

listA = ['a', 'b', 'c', 'd', 'f']
listB = ['c', 'f', 'h', 'j']

# 两种写法都可以
common_elements = list(set(listA) & set(listB))
# 或者用更直观的intersection方法
# common_elements = list(set(listA).intersection(set(listB)))

print(common_elements)  # 输出类似 ['c', 'f'](注:集合是无序的,输出顺序可能和示例不同)

小提醒:集合会自动去重,而且不保留元素的原始顺序。如果你的列表里有重复元素,或者需要保持元素在原列表中的出现顺序,这个方法就不太适配了。

方法2:列表推导式(保留顺序+支持重复元素)

如果你需要严格保持元素在原列表中的顺序,或者列表里存在重复元素需要保留,列表推导式是更好的选择:

listA = ['a', 'b', 'c', 'd', 'f', 'c']  # 包含重复的'c'
listB = ['c', 'f', 'h', 'j']

common_elements = [x for x in listA if x in listB]
print(common_elements)  # 输出: ['c', 'f', 'c']

如果listB的元素很多,x in listB的线性查找效率会偏低,这时候可以先把listB转成集合优化查询速度:

setB = set(listB)
common_elements = [x for x in listA if x in setB]

这样既保留了原始顺序,又提升了整体效率。

方法3:filter函数(函数式编程风格)

如果你偏好函数式编程的写法,用filter函数也能实现同样的效果,同样可以配合集合来优化效率:

listA = ['a', 'b', 'c', 'd', 'f']
listB = ['c', 'f', 'h', 'j']

setB = set(listB)
common_elements = list(filter(lambda x: x in setB, listA))
print(common_elements)  # 输出: ['c', 'f'](顺序和listA一致)

内容的提问来源于stack exchange,提问作者Araújo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:07:16