如何在Python列表中查找项目的索引 在Python列表中查找项目的索引有多种方法。你可以使用index()函数来找到一个特定项的索引。这个函数接受一个参数,即你要查找的项。如果找到了这个项,它将返回该项的索引;如果没有找到,它将引发一个ValueError异常。 以下是一个例子: “` fruits = [‘apple’, ‘banana’, ‘orange’, ‘pear’] index = fruits.index(‘orange’) print(index) # 输出:2 “` 在这个例子中,我们有一个水果列表。我们使用index()函数查找了’orange’这个项,并将它的索引赋给了变量index。然后,我们打印了该索引。 另一种方法是使用enumerate()函数。这个函数将返回一个迭代器,其中包含了列表的索引和对应的值。你可以使用它来遍历列表并找到特定项的索引。以下是一个例子: “` fruits = [‘apple’, ‘banana’, ‘orange’, ‘pear’] for index, fruit in enumerate(fruits): if fruit == ‘orange’: print(index) # 输出:2 break “` 在这个例子中,我们使用了enumerate()函数来遍历fruits列表。对于每个项,我们检查它是否等于’orange’。如果是,我们打印它的索引并使用break语句退出循环。 这些是在Python列表中查找项目索引的两种常用方法。根据你的具体需求,你可以选择其中一种来使用。

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

在使用Python列表时,您可能需要找出特定项目出现的索引位置。您可以通过以下方式实现:

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

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

Python列表的回顾

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

考虑以下示例fruits:一个包含5种不同水果的列表。

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

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

len(fruits)
# 输出: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]}")

# 输出
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

现在我们已经介绍了range()的基本知识,让我们学习如何在列表中找到项目的索引。

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

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

使用for循环和range()函数

让我们将target固定为我们在列表中搜索的值。

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

  • 循环遍历水果列表,访问每个索引。
  • 检查当前索引 i 处的项目是否等于目标。
  • 如果为True,则打印出目标在索引i处找到。
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}")

# 输出
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("抱歉,未找到目标!")
  else:
    print(f"{target} 在索引 {target_indices} 处找到")

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

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

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

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

这次我们搜索的目标字符串是 'mango',它出现了两次,分别在索引 1 和 4 处。

fruits = ["apple","mango","strawberry","pomegranate","mango","melon"]
target = "mango"
find_in_list(target,fruits)

# 输出
mango 在索引 [1, 4] 处找到

调用带有 targetfruits 作为参数的函数 find_in_list,我们可以看到返回了两个索引。

target = "turnip"
find_in_list(target,fruits)

# 输出
抱歉,未找到目标!

如果尝试搜索不在 fruits 列表中的 'turnip',将收到一个未找到目标的消息。

使用 for 循环和 enumerate() 函数

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

下面的代码示例展示了如何使用 enumerate() 函数获取索引和项。

fruits = ["apple","mango","strawberry","pomegranate","mango","melon"]
for index, fruit in enumerate(fruits):
  print(f"索引 {index}: {fruit}")

# 输出
索引 0: apple
索引 1: mango
索引 2: strawberry
索引 3: pomegranate
索引 4: mango
索引 5: melon

现在,让我们使用 enumerate() 函数重新定义 Python 函数,使用它来查找列表中项的索引。

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("抱歉,未找到目标!")
  else:
    print(f"{target} 在索引 {target_indices} 处找到")

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

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

通过迭代使用列表推导式查找列表项的索引

List comprehensions in Python 允许您根据某些条件从现有列表中创建新的列表。以下是一般的结构:

new_list = [ for  if ] 

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

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

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()方法仅返回列表中value第一个出现的索引。即使在列表片段[start: end-1]中找到项目的索引,该方法也仅返回对应于第一次出现的项目的索引。

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

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

fruits.index(target)
1

尽管fruits列表中有两个'mango'的出现,但您可以看到只返回了第一次出现的索引。

要获取mango的第二次出现的索引,我们可以搜索从索引2开始并延伸到索引5的列表片段,如下所示。

fruits.index(target,2,5)
4

如何处理Python中的ValueError

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

target = "carrot"

fruits.index(target)

# 输出
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
 in ()
      1 target = "carrot"
      2 
----> 3 fruits.index(target)

ValueError: 'carrot' is not in list

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

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

try:
  # 做这个
except :
  # 处理作为异常

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

target = "carrot"
try:
  fruits.index(target)
except ValueError:
  print(f"对不起,在列表中找不到{target}")

# 输出
对不起,在列表中找不到carrot

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

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

总结

下面是你学到的在Python列表中找到项的索引的不同方法的总结。

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

接下来,学会按键或按值进行排序。愉快的编程!

类似文章