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

如何使用Python提取两个二维数组中的公共元素?

Python提取两个二维数组公共元素的实现方案

一维列表求公共元素的集合方案无法直接用于二维数组,原因是列表是不可哈希类型,不能作为集合元素,只要解决子列表的哈希问题就能复用集合的高效求交逻辑。以下是两种常用实现方案:


方案1:元组转集合求交(推荐,性能最优)

  • 适用场景:所有子列表内的元素都是可哈希类型(数字、字符串、元组等,绝大多数常规业务场景都满足)
  • 实现思路:把两个数组里的子列表转成可哈希的元组类型,就可以用集合的交集运算快速找公共元素,最后再把结果转回列表格式即可。
  • 代码示例:
# 测试用二维数组
a = [[1,2], [3,4], [5,6]]
b = [[7,8], [1,2], [87,65], [3,4]]

# 先把数组b的所有子列表转元组存入集合,集合查找时间复杂度为O(1)
b_tuple_set = set(map(tuple, b))
# 遍历数组a,筛选出同时存在于b中的子列表,保留a中原有顺序
c = [sub_list for sub_list in a if tuple(sub_list) in b_tuple_set]

print(c) # 输出结果:[[1, 2], [3, 4]]
  • 补充说明:
    • 如果不需要保留原数组顺序、且需要结果自动去重,可以直接计算两个元组集合的交集,写法更简洁:
    # 注意:该写法结果顺序不固定
    c = list(map(list, set(map(tuple, a)) & set(map(tuple, b))))
    
    • 该方案时间复杂度为O(n+m),远高于遍历比对的方案,两个数组数据量较大时优先选这个。

方案2:直接遍历比对

  • 适用场景:子列表内存在不可哈希元素(比如子列表里还嵌套了列表),无法转成元组使用集合的场景,或者数据量很小的简单场景。
  • 实现思路:双层循环逐个比对两个数组的子列表是否相等,把相等的子列表存入结果即可。
  • 代码示例:
a = [[1,2], [3,4], [5,6]]
b = [[7,8], [1,2], [87,65], [3,4]]
c = []

for item_a in a:
    for item_b in b:
        # 比对两个子列表是否完全相等,且结果里还没存过该元素(去重,不需要可删除该判断)
        if item_a == item_b and item_a not in c:
            c.append(item_a)

print(c) # 输出结果:[[1, 2], [3, 4]]
  • 补充说明:该方案时间复杂度为O(n*m),两个数组长度都很大时运行效率会很低,非必要不优先使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 10:15:33