如何在 Python 列表中查找项目的索引

已发表: 2022-06-29

在本指南中,您将学习如何使用简单的迭代和内置的列表方法index()在 Python 列表中查找元素的索引。

使用 Python 列表时,您可能需要找出特定项目出现的索引。 您可以通过以下方式做到这一点:

  • 遍历列表并检查当前索引处的项目是否等于特定值
  • 使用内置列表方法index()

您将在本教程中学习上述两种方法。 让我们开始吧。

Python 列表,重温

在 Python 中,列表是相同或不同数据类型的项目的集合。 它们是可变的; 您可以就地修改它们,而无需创建新列表。

考虑这个例子fruits : 5 种不同水果的列表。

 fruits = ["apple","mango","strawberry","pomegranate","melon"]

您可以使用内置的len()函数获取任何 Python 对象的长度。 因此,您可以使用列表对象( fruits )作为参数调用len()函数来获取其长度,如下所示。

 len(fruits) # Output: 5

在本教程中,我们将使用fruits列表作为运行示例。

Python 列表中的索引

Python 遵循零索引。 所以在任何 Python 可迭代中,第一项在索引 0 处,第二项在索引 1 处,依此类推。 如果可迭代的长度为k ,则最后一项位于索引k - 1处。

在 Python 中,您可以使用 range() 函数在遍历可迭代对象时获取索引。

注意:当你遍历range(k)时,你会得到索引 0,1,2,…,(k-1)。 因此,通过设置k = len(list) ,您可以获得所有有效索引的列表。

以下代码单元对此进行了解释。

 for i in range(len(fruits)): print(f"i:{i}, fruit[{i}] is {fruits[i]}") # Output i:0, fruit[0] is apple i:1, fruit[1] is mango i:2, fruit[2] is strawberry i:3, fruit[3] is pomegranate i:4, fruit[4] is melon

现在我们已经介绍了 Python 列表的基础知识,让我们学习如何在列表中查找项目的索引。

python-在列表中查找

使用 for 循环通过迭代查找列表项的索引

让我们考虑上一节中的fruits列表。 我们将学习如何使用for循环通过迭代来查找此列表中特定项目的索引。

使用 for 循环和 range() 函数

让我们修复target :我们在列表中搜索的值。

您可以使用for循环和range()函数来获取从0len(fruits) - 1的索引列表。

  • 遍历访问每个索引的水果列表。
  • 检查当前索引 i 处的项目是否等于目标。
  • 如果为True ,则打印出已在索引i处找到target
 fruits = ["apple","mango","strawberry","pomegranate","melon"] target = "mango" for i in range(len(fruits)): if fruits[i] == target: print(f"{target} found at index {i}") # Output mango found at index 1

在此示例中,目标字符串'mango'在列表fruits中仅出现一次(在索引 1 处)。

但是,有时目标值出现不止一次或根本不出现。 为了处理这些情况,让我们修改上面的循环并将内容包装在一个名为find_in_list的函数中。

理解函数定义

函数find_in_list有两个参数:

  • target :您要搜索的值,以及
  • py_list :您正在搜索的 Python 列表。
 def find_in_list(target,py_list): target_indices = [] for i in range(len(fruits)): if fruits[i] == target: target_indices.append(i) if target_indices == []: print("Sorry, target not found!") else: print(f"{target} is found at indices {target_indices}")

在函数体中,我们初始化一个空列表target_indices 。 我们遍历列表并访问列表项。 如果在特定索引处找到目标,我们使用append()方法将该索引添加到target_indices列表中。

注意:在 Python 中, list.append(item)item添加到list的末尾。

  • 如果永远找不到目标,那么target_indices是一个空列表; 通知用户目标不在列表中。
  • 如果在多个索引处找到目标,则target_indices包含所有这些索引。

接下来,让我们重新定义fruits列表,如图所示。

这次我们搜索target字符串'mango' ,它出现了两次——在索引 1 和 4 处。

 fruits = ["apple","mango","strawberry","pomegranate","mango","melon"] target = "mango" find_in_list(target,fruits) # Output mango is found at indices [1, 4]

在以targetfruits作为参数调用函数find_in_list时,我们看到两个索引都返回了。

 target = "turnip" find_in_list(target,fruits) # Output Sorry, target not found!

如果您尝试搜索fruits列表中不存在的'turnip' ,您会收到一条消息,指出目标尚未找到。

使用 for 循环和 enumerate() 函数

在 Python 中,您可以使用enumerate()函数同时访问索引和项目,而不必使用range()函数。

以下代码单元显示了如何使用enumerate()函数来获取索引和项目。

 fruits = ["apple","mango","strawberry","pomegranate","mango","melon"] for index,fruit in enumerate(fruits): print(f"Index {index}: {fruit}") # Output Index 0: apple Index 1: mango Index 2: strawberry Index 3: pomegranate Index 4: mango Index 5: melon

现在,让我们重写 Python 函数以使用enumerate()函数查找列表中项目的索引。

 def find_in_list(target,py_list): target_indices = [] for index, fruit in enumerate(fruits): if fruit == target: target_indices.append(index) if target_indices == []: print("Sorry, target not found!") else: print(f"{target} is found at indices {target_indices}")

与上一节一样,您现在可以使用有效参数调用find_in_list函数。

您可以将上述函数定义转换为等效的列表推导式,我们将在下一节中这样做。

使用列表理解通过迭代查找列表项的索引

Python 中的列表推导允许您根据某些条件从现有列表创建列表。 这是一般构造:

 new_list = [<output> for <items in existing iterables> if <condition is true>]

下图描述了如何识别列表理解的元素; 使用它,您可以将函数find_in_list转换为列表理解。

python-在列表中查找

使用上述内容,用于创建目标索引的列表推导表达式如下。

 target_indices = [index for index,fruit in enumerate(fruits) if fruit==target]

作为练习,您可以尝试运行上面的代码片段以获取其他一些示例。

使用 index() 方法查找列表项的索引

要在 Python 列表中查找项目的索引,您还可以使用内置的.index()方法。 这是一般语法:

 list.index(value,start,end)

解析上述方法:

  • value是您要搜索的目标值。
  • startend可选的位置参数; 您可以使用它们在列表切片中搜索从start并一直延伸到end - 1的项目的索引。

注意.index()方法返回list第一次出现value的索引。 即使您在列表切片[start: end-1]中找到项目的索引,此方法也仅返回与该项目的第一次出现相对应的索引。

让我们重新审视我们的示例以了解.index()方法的工作原理。

 fruits = ["apple","mango","strawberry","pomegranate","mango","melon"] target = "mango" fruits.index(target) 1

即使fruits列表中出现了两次'mango' ,您也可以看到只返回了第一次出现的索引。

要获得第二次出现的芒果的索引,我们可以搜索从索引 2 开始并一直延伸到索引 5 的列表切片,如下所示。

 fruits.index(target,2,5) 4

如何在 Python 中处理 ValueErrors

现在让我们看看如果您尝试查找列表中不存在的项目的索引会发生什么,例如'carrot'

 target = "carrot" fruits.index(target) # Output --------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-17-81bd454e44f7> in <module>() 1 target = "carrot" 2 ----> 3 fruits.index(target) ValueError: 'carrot' is not in list

如上面的代码单元所示,这会引发 ValueError。 在 Python 中,您可以使用tryexcept块将其作为异常处理。

使用try-except的一般语法如下。

 try: # to do this except <ErrorType>: # do this to handle <ErrorType> as exception

使用上面的 try-except 块,我们可以将ValueError作为异常处理。

 target = "carrot" try: fruits.index(target) except ValueError: print(f"Sorry, could not find {target} in list") # Output Sorry, could not find carrot in list

上面的代码执行以下操作:

  • 如果目标存在于列表中,则返回目标的索引。
  • 如果目标不存在,它将ValueError作为异常处理并打印出错误消息。

加起来

这里总结了你已经学会的在 Python 列表中查找项目索引的不同方法。

  • 您可以使用 Python 的for循环和range()函数来获取项目及其各自的索引。 检查索引处的项目是否与目标匹配。
  • 您还可以使用enumerate()函数同时访问项目和索引。
  • 您可以在列表推导表达式中使用上述两种方法。
  • 要在列表中查找项目的索引,您还可以使用内置的.index()方法。
  • list.index(value)返回list中第一次出现value的索引。 如果该值不存在,则会引发ValueError
  • 您可以使用list.index(value, start, end)搜索列表的某个切片,以搜索列表切片[start:end-1]中出现的值。

接下来,学习按键或按值对 Python 字典进行排序。 快乐的 Python 编程!