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

Python 对比两列数据提取公共元素及对应行号的实现方法

Python实现两列表公共元素及对应索引查找方案

Python没有直接实现该需求的内置函数,但可以通过标准库语法快速实现,也可以借助numpy库的现成方法完成,以下是两种可直接运行的实现:

方案1:纯Python实现(无需第三方库)

适合数据量较小的场景,可灵活控制结果排序规则:

A = [11, 24, 7, 7, 0, 4, 9, 20, 3, 5]
B = [5, 8, 9, 1, 11]

# 构造A的元素到索引的映射
a_index_map = {val: idx for idx, val in enumerate(A)}

common_vals = []
row_a = []
row_b = []

# 按B的遍历顺序收集结果,匹配你给出的示例输出顺序
for idx_b, val in enumerate(B):
    if val in a_index_map:
        common_vals.append(val)
        row_a.append(a_index_map[val])
        row_b.append(idx_b)

print(common_vals) # 输出:[5, 9, 11]
print(row_a) # 输出:[9, 6, 0]
print(row_b) # 输出:[0, 2, 4]

如果需要结果顺序和公共元素在A中出现的顺序一致,只需调换遍历逻辑,先构造B的元素索引映射,再遍历A即可。

方案2:numpy实现(适合大数据量场景)

可以直接调用numpy.intersect1d方法,开启return_indices参数即可同时返回公共元素在两个数组中的索引:

import numpy as np

A = np.array([11, 24, 7, 7, 0, 4, 9, 20, 3, 5])
B = np.array([5, 8, 9, 1, 11])

# 直接获取公共元素、对应A的索引、对应B的索引
common_vals, row_a, row_b = np.intersect1d(A, B, return_indices=True)

print(common_vals) # 输出:[ 5  9 11]
print(row_a) # 输出:[9 6 0]
print(row_b) # 输出:[0 2 4]

注意:numpy.intersect1d返回的公共元素默认按升序排序,如果需要自定义顺序可以自行调整结果排序规则。如果列表存在重复公共元素,该方法默认只返回每个元素第一次出现的索引。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 07:24:07