跳至主要内容

Python 列表 index() 方法详解与示例

学习如何使用 Python 的 index() 函数查找列表中元素的位置。
· 6分钟 阅读

使用 AI 探索

在 Python 中,数据结构可帮助您高效地组织与存储数据。列表(list)是一种常见且通用的结构,它可以按特定顺序保存不同类型的数据。Python 还提供了许多用于 操作 列表的函数或方法。

在本教程中,您将学习 Python 的 index() 函数。index() 方法会在列表中搜索某个元素并返回其位置/索引。首先,我们会简要介绍列表,然后通过一些简单示例展示如何使用 index() 函数。

为了便于您亲自运行本教程中的所有示例代码,您可以免费创建一个 DataLab 工作簿,其中已预装 Python 并包含所有代码示例。

Python 中的索引是什么?

在 Python 中,索引(indexing)是指通过位置或索引号访问序列(如字符串或列表)中某个特定元素的过程。Python 的索引从 0 开始,这意味着序列中的第一个元素索引为 0,第二个元素索引为 1,依此类推。例如,若有字符串 "Hello",我们可以使用方括号表示法 string[0] 通过索引 0 访问第一个字母 "H"。

Python 内置的 index() 函数是查找序列中特定元素索引的实用工具。该函数接收要搜索的值作为参数,并返回该值在序列中第一次出现的位置索引。

如果在序列中未找到该值,函数会抛出 ValueError。例如,若有列表 [1, 2, 3, 4, 5],我们可以调用 list.index(3) 查找值 3 的索引,该调用将返回 2(因为 3 是列表中的第三个元素,而索引从 0 开始)。

index() 函数在 Python 中非常强大,它简化了在序列中查找元素索引的过程,无需编写循环或条件语句。该函数在处理大型数据集或复杂结构时尤其有用,因为手动搜索既耗时又容易出错。

什么是 index() 函数?

index() 方法返回列表中被搜索元素首次出现的位置的最低索引。

让我们试试看:

list_numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
element = 3
print(list_numbers.index(element)) # 2

如果搜索的是不存在的元素,将会抛出 ValueError。

list_numbers = [4, 5, 6, 7, 8, 9, 10]
element = 3 # Not in the list
print(list_numbers.index(element)) # Throws a ValueError

处理字符串

试试字符串元素:

list_numbers = [1, 'two', 3, 4, 5, 6, 7, 8, 9, 10]
element = 'two'
print(list_numbers.index(element)) # 1

注意:在搜索字符串时,index() 区分大小写。例如,'Hello'.index('h') 会抛出 ValueError。

查找首次出现的位置

假设某个元素出现了多次,index() 将返回该元素首次出现的位置。

list_numbers = [3, 1, 2, 3, 3, 4, 5, 6, 3, 7, 8, 9, 10]
element = 3
print(list_numbers.index(element)) # 0

返回的位置是 0,因为 3 首次出现在第一个位置,即 Python 的第 0 个索引。

其内部原理如下:索引会从第 1 个位置(第 0 个索引)开始逐一检查所有值,寻找您要搜索的元素。一旦找到该值,就返回其位置并结束查找。然而,当列表很大而您需要获取靠后位置的元素索引时,这样逐一扫描并不高效。

使用 start 和 stop 参数

list_numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
element = 7
print(list_numbers.index(element, 5, 8)) # 6

语法为:list_name.index(element, start, stop)。

其中 start 和 stop 为可选参数。实际上,只有在完全确定范围时才应使用;否则将会得到 ValueError,如下所示。

list_numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
element = 7
print(list_numbers.index(element, 1, 5)) # Throws a ValueError

查找所有出现位置

由于 index() 只返回对象的第一个匹配项,如果您需要列表中更多匹配项的位置,可以使用列表推导式或生成器表达式。方法如下:

list_numbers = [3, 1, 2, 3, 3, 4, 5, 6, 3, 7, 8, 9, 10]

# List comprehension
print([i for i, n in enumerate(list_numbers) if n == 3]) # [0, 3, 4, 8]
list_numbers = [3, 1, 2, 3, 3, 4, 5, 6, 3, 7, 8, 9, 10]
g = (i for i, n in enumerate(list_numbers) if n == 3) # Generator expression

print("Generators store values, the first value here is:", next(g), ". Then the next is:", next(g), "followed by ", next(g),"and finally ", next(g))

# Generators store values, the first value here is: 0. Then the next is: 3 followed by  4 and finally  8

生成器更省内存,因为它们一次只产生一个元素,而不是像列表推导式那样存储所有结果。

结语

恭喜您,已经学会了 Python 的 index() 函数!您了解了它如何帮助处理列表,并接触了一些新概念。想深入了解列表推导式,请查看我们的 Python 列表推导式 教程。关于生成器与生成器表达式,请参阅我们的 Python 迭代器教程。

Sejal Jaiswal

作者

Sejal Jaiswal

我曾在多个行业工作,身兼数职:软件开发工程师、机器学习研究员、数据科学家、产品经理。但归根结底,我是一名热爱学习并乐于分享知识的程序员!

FAQs

如果有多个值与我搜索的元素匹配,会发生什么?

index() 方法只返回匹配元素的首次出现位置的索引。若需要所有位置,请结合 enumerate() 使用列表推导式。

我可以在元组或字符串上使用 index() 吗?

可以!index() 方法适用于任意序列类型,包括元组和字符串:

my_tuple = (1, 2, 3, 2)
print(my_tuple.index(2))  # Output: 1

text = "hello world"
print(text.index('o'))    # Output: 4
有没有优雅处理 ValueError 的方法?

可以,将 index() 调用放入 try...except 块中,以避免在元素未找到时程序崩溃:

my_list = [1, 2, 3]
try:
    print(my_list.index(4))
except ValueError:
    print("Element not found.")
如何从列表末尾开始搜索?

index() 方法不支持反向搜索。若要查找最后一次出现的位置,可手动反转列表或使用推导式:

my_list = [1, 2, 3, 2, 1]
last_index = len(my_list) - 1 - my_list[::-1].index(2)
print(last_index)  # Output: 3
index() 与 find() 有何不同?

find() 用于字符串,当未找到时返回 -1 而不是抛出错误。列表没有 find() 方法。

text = "hello"
print(text.find('e'))  # Output: 1
print(text.find('z'))  # Output: -1
可以在嵌套列表上使用 index() 吗?

可以,但仅限于顶层。index() 不会在嵌套结构内部搜索。

nested_list = [[1, 2], [3, 4]]
print(nested_list.index([3, 4]))  # Output: 1
# This won't work: nested_list.index(3)
什么是 “list index out of range” 错误?

“list index out of range”(列表索引超出范围)错误发生在您尝试访问超出列表有效索引范围的位置时。例如,若列表有 5 个元素,则有效索引为 0 至 4。若尝试访问大于等于 5 的索引,就会出现此错误。

为避免该错误,应确保您要访问的索引处于列表的有效范围内。您可以使用 len() 函数获取列表长度,并检查索引是否在有效范围内。

什么是 “list indices must be integers” 错误?

“list indices must be integers”(列表索引必须为整数)错误发生在您尝试使用非整数作为列表索引时。例如,如果使用浮点数或字符串作为列表索引,就会出现此错误。

为避免该错误,请确保使用整数值作为列表索引。若需要使用非整数值作为索引,您可以使用 int() 函数将其转换为整数。

主题