在 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) ) 技术支持 示例学习编辑器,按 Tab 键进入。按 Escape 键然后按 Tab 或 Shift+Tab 导航退出。
如果搜索的是不存在的元素,将会抛出 ValueError。
list_numbers = [ 4 , 5 , 6 , 7 , 8 , 9 , 10 ]
element = 3
print ( list_numbers. index( element) ) 技术支持 示例学习编辑器,按 Tab 键进入。按 Escape 键然后按 Tab 或 Shift+Tab 导航退出。
处理字符串
试试字符串元素:
list_numbers = [ 1 , 'two' , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ]
element = 'two'
print ( list_numbers. index( element) ) 技术支持 示例学习编辑器,按 Tab 键进入。按 Escape 键然后按 Tab 或 Shift+Tab 导航退出。
注意: 在搜索字符串时,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) ) 技术支持 示例学习编辑器,按 Tab 键进入。按 Escape 键然后按 Tab 或 Shift+Tab 导航退出。
返回的位置是 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 ) ) 技术支持 示例学习编辑器,按 Tab 键进入。按 Escape 键然后按 Tab 或 Shift+Tab 导航退出。
语法为: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 ) ) 技术支持 示例学习编辑器,按 Tab 键进入。按 Escape 键然后按 Tab 或 Shift+Tab 导航退出。
查找所有出现位置
由于 index() 只返回对象的第一个匹配项,如果您需要列表中更多匹配项的位置,可以使用列表推导式或生成器表达式。方法如下:
list_numbers = [ 3 , 1 , 2 , 3 , 3 , 4 , 5 , 6 , 3 , 7 , 8 , 9 , 10 ]
print ( [ i for i, n in enumerate ( list_numbers) if n == 3 ] ) 技术支持 示例学习编辑器,按 Tab 键进入。按 Escape 键然后按 Tab 或 Shift+Tab 导航退出。
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 )
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) )
技术支持 示例学习编辑器,按 Tab 键进入。按 Escape 键然后按 Tab 或 Shift+Tab 导航退出。
生成器更省内存,因为它们一次只产生一个元素,而不是像列表推导式那样存储所有结果。
结语
恭喜您,已经学会了 Python 的 index() 函数!您了解了它如何帮助处理列表,并接触了一些新概念。想深入了解列表推导式,请查看我们的 Python 列表推导式 教程。关于生成器与生成器表达式,请参阅我们的 Python 迭代器教程 。
我曾在多个行业工作,身兼数职:软件开发工程师、机器学习研究员、数据科学家、产品经理。但归根结底,我是一名热爱学习并乐于分享知识的程序员!
FAQs 如果有多个值与我搜索的元素匹配,会发生什么?⌄ index() 方法只返回匹配元素的首次出现 位置的索引。若需要所有位置,请结合 enumerate() 使用列表推导式。
我可以在元组或字符串上使用 index() 吗?⌄ 可以!index() 方法适用于任意序列类型,包括元组 和字符串:
my_tuple = ( 1 , 2 , 3 , 2 )
print ( my_tuple. index( 2 ) )
text = "hello world"
print ( text. index( 'o' ) ) 技术支持 有没有优雅处理 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)
技术支持 index() 与 find() 有何不同?⌄ find() 用于字符串 ,当未找到时返回 -1 而不是抛出错误。列表没有 find() 方法。
text = "hello"
print ( text. find( 'e' ) )
print ( text. find( 'z' ) )
技术支持 可以在嵌套列表上使用 index() 吗?⌄ 可以,但仅限于顶层 。index() 不会在嵌套结构内部搜索。
nested_list = [ [ 1 , 2 ] , [ 3 , 4 ] ]
print ( nested_list. index( [ 3 , 4 ] ) )
技术支持 什么是 “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() 函数将其转换为整数。
软件开发工程师、程序员、数据科学家、商业智能开发工程师、产品负责人
在 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 中非常强大,它简化了在序列中查找元素索引的过程,无需编写循环或条件语句。该函数在处理大型数据集或复杂结构时尤其有用,因为手动搜索既耗时又容易出错。