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

如何在Python中批量查找列表中多个目标值的索引

实现方法

针对你的需求,这里有几种实用的实现方式,可根据数据特性选择:

方法1:构建值-索引映射字典(最快,适合元素唯一的场景)

如果大列表(代码中用big_list代替你示例里的list,避免和内置关键字冲突)的元素唯一且无精度问题,可以先把大列表的元素与对应索引做成字典,之后直接通过目标值取索引,效率最高:

# 构建值到索引的映射
value_to_index = {val: idx for idx, val in enumerate(big_list)}
# 遍历目标值列表获取索引
output_index = [value_to_index[val] for val in target_values]

浮点数精度处理

如果是浮点数,直接字典匹配可能因精度误差失败(比如0.001实际存储为0.0010000000001),可以先对数值做四舍五入处理:

# 保留足够位数的小数,比如3位
value_to_index = {round(val, 3): idx for idx, val in enumerate(big_list)}
output_index = [value_to_index[round(val, 3)] for val in target_values]

方法2:直接遍历查找(简单直观,适合小数据量)

如果数据量不大,直接用列表的index()方法逐个查找,代码最简洁:

output_index = []
for val in target_values:
    # 必要时用round处理浮点数精度
    idx = big_list.index(round(val, 3))
    output_index.append(idx)

缺点是每次index()都会遍历整个大列表,数据量大时效率偏低。

方法3:二分查找(适合有序列表,效率更高)

从你的示例看,大列表是递增有序的,这种情况用bisect模块做二分查找,时间复杂度为O(logn),比线性查找快很多:

import bisect

output_index = []
for val in target_values:
    # bisect_left定位第一个等于val的位置
    idx = bisect.bisect_left(big_list, val)
    # 通过误差阈值验证匹配结果,处理浮点数精度
    if idx < len(big_list) and abs(big_list[idx] - val) < 1e-6:
        output_index.append(idx)
    else:
        # 处理找不到目标值的情况,可根据需求调整
        raise ValueError(f"值 {val} 未在big_list中找到")

这种方法尤其适合超大列表场景,容错性更强。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 21:45:38