如何在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()
函数来获取从0
到len(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] 处找到
调用带有 target
和 fruits
作为参数的函数 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
是您要搜索的目标值。start
和end
是可选的位置参数;您可以使用它们来搜索列表片段中从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中,您可以使用try
和except
块将其处理为异常。
使用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)返回list中value的首次出现的索引。如果该值不存在,则会引发ValueError。
- 你可以使用list.index(value, start, end)来搜索列表切片 [start:end-1] 中值的出现。
接下来,学会按键或按值进行排序。愉快的编程!