Python 如何查找列表中元素的索引?
list.index(x) 返回元素首次出现的索引,找不到抛 ValueError;找全部匹配用 enumerate 列表推导;NumPy 数组用 np.where。本文给出各场景写法与安全用法。
最直接: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) # 2
安全写法
if 'mango' in fruits:
i = fruits.index('mango')
# 或
try:
i = fruits.index('mango')
except ValueError:
i = -1
常见问题(FAQ)
Q:index 的时间复杂度? O(n) 线性查找;频繁查找考虑 dict/set 或排序后 bisect。
Q:NumPy 数组呢? np.where(arr == x)[0] 返回全部匹配下标数组。