Python 如何查找列表中元素的索引?

list.index(x) 返回元素首次出现的索引,找不到抛 ValueError;找全部匹配用 enumerate 列表推导;NumPy 数组用 np.where。本文给出各场景写法与安全用法。

最佳实践
Python 如何查找列表中元素的索引?封面

最直接:my_list.index(目标值) 返回第一个匹配的下标(从 0 开始);注意找不到会抛 ValueError,用 in 先判断或 try 捕获。

基本用法

fruits = ['apple', 'banana', 'cherry', 'banana']
fruits.index('banana')        # 1(第一个匹配)
fruits.index('banana', 2)     # 3(从下标 2 开始找)

找全部匹配的索引

[i for i, x in enumerate(fruits) if x == 'banana']   # [1, 3]

按条件查找(找第一个满足条件的)

nums = [3, 8, 15, 7]
i = next((i for i, x in enumerate(nums) if x > 10), None)   # 2

安全写法

if 'mango' in fruits:
    i = fruits.index('mango')
# 或
try:
    i = fruits.index('mango')
except ValueError:
    i = None  # 使用前判断;-1 会索引最后一个元素

常见问题(FAQ)

Q:index 的时间复杂度? O(n) 线性查找;频繁查找可按需求建立值到索引的 dict;set 只支持成员判断,排序后 bisect 的位置也不等于原列表索引。

Q:NumPy 数组呢? 对一维数组,np.where(arr == x)[0] 返回全部匹配下标;多维数组返回每个维度的坐标数组。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台