原文: Python Find in List – How to Find the Index of an Item or Element in a List
在本文中,你将学习如何在 Python 编程语言中查找列表中包含的元素的索引。
有几种方法可以实现这一点。这里我将介绍三种方法:
- 使用
index()
列表方法查找索引 - 使用
for
循环 - 使用列表推导式和
enumerate()
函数
具体来说,以下是我们将深入介绍的内容:
- Python 中列表的概述
- 索引的工作原理
- 使用
index()
方法查找项目的索引(在index()
方法中使用可选参数) - 获取列表中所有项目的索引
- 使用
for
循环获取列表中所有项目的索引 - 使用列表推导式和
enumerate()
函数获取列表中所有项目的索引
Python 中的列表是什么
列表是 Python 中的一种内置数据类型,也是最强大的数据结构之一。
它们充当容器并以相同的变量名称存储多个通常是相关的项目。
项目被放在方括号 []
内。方括号内的每一项都用逗号 ,
分隔。
# a list called 'my_information' that contains strings and numbers
my_information = ["John Doe", 34, "London", 1.76]
从上面的示例中,你可以看到列表可以包含任何数据类型的项目,这意味着列表元素可以是异构的。
与仅存储相同类型项目的数组不同,列表具有更大的灵活性。
列表也是可变的,这意味着它们是动态的。你可以更新列表项,可以将新项添加到列表中,并且可以在程序的整个生命周期中随时删除任何项。
Python 中的索引概述
如前所述,列表是项目的集合。具体来说,它们是项目的有序集合,并且其中的项目具有一定的顺序。
列表中的每个元素都有一个唯一的位置来标识它。
该位置叫作元素的索引。
Python 和很多编程语言中的索引是从 0
开始,而不是 1
。
让我们看一下上一节中使用的列表:
my_information = ["John Doe", 34, "London", 1.76]
该列表是零索引的,计数从 0
开始。
第一个列表元素 “John Doe”
的索引为 0
。
第二个列表元素 34
的索引为 1
。
第三个列表元素 “London”
的索引为 2
。
第四个列表元素 1.76
的索引为 3
。
索引对于访问你知道其位置(索引)的特定列表项很有用。
因此,你可以使用索引来获取你想要的任何列表元素。
要访问一个项目,首先包含列表的名称,然后在方括号中包含与你要访问的项目的索引对应的整数。
以下是使用索引访问每个项目的方法:
my_information = ["John Doe", 34, "London", 1.76]
print(my_information[0])
print(my_information[1])
print(my_information[2])
print(my_information[3])
#output
#John Doe
#34
#London
#1.76
但是如何在 Python 中查找列表项的索引呢?
在接下来的部分中,你将看到一些查找列表元素索引的方法。
使用 Python 中的 List index() 方法查找项目的索引
到目前为止,你已经了解了如何通过引用它的索引来访问一个值。
但是,当你不知道索引并且正在处理一个大列表时会发生什么?
你可以给出一个值并找到它的索引,然后检查它在列表中的位置。
为此,Python 的内置 index()
方法可以被用作搜索工具。
index()
方法的语法如下所示:
my_list.index(item, start, end)
让我们分解一下:
my_list
是你正在搜索的列表的名称。.index()
是采用三个参数的搜索方法,一个参数是必需的,另外两个是可选的。item
是必需的参数,它是你要搜索其索引的元素。start
是第一个可选参数,这是你开始搜索的索引。end
是第二个可选参数,这是你将结束搜索的索引。
让我们看一个仅使用必需参数的示例:
programming_languages = ["JavaScript","Python","Java","C++"]
print(programming_languages.index("Python"))
#output
#1
在上面的示例中,index()
方法只接受一个参数,即你要查找其索引的元素。
请记住,你传递的参数是区分大小写的。这意味着如果你传递的是 “python”,而不是 “Python”,你将收到一个错误,因为带有小写 “p” 的 “python” 不是列表的一部分。
返回值是一个整数,它是作为参数传递给方法的列表项的索引。
让我们看另一个例子:
programming_languages = ["JavaScript","Python","Java","C++"]
print(programming_languages.index("React"))
#output
#line 3, in <module>
# print(programming_languages.index("React"))
#ValueError: 'React' is not in list
如果你尝试搜索一个项目,但你正在搜索的列表中没有匹配项,Python 将抛出一个错误作为返回值——它会返回一个 ValueError
。
这意味着你要搜索的项目在列表中不存在。
防止这种情况发生的一种方法是将对 index()
方法的调用放在 try/except
块中。
如果该值不存在,控制台将显示一条消息,说明它未存储在列表中,因此不存在。
programming_languages = ["JavaScript","Python","Java","Python","C++","Python"]
try:
print(programming_languages.index("React"))
except ValueError:
print("That item does not exist")
#output
#That item does not exist
另一种方法是首先检查项目是否在列表中,然后再查找其索引。输出将是一个布尔值——它将是 True 或 False。
programming_languages = ["JavaScript","Python","Java","Python","C++","Python"]
print("React" in programming_languages)
#output
#False
如何在 index() 方法中使用可选参数
让我们看一下下面的例子:
programming_languages = ["JavaScript","Python","Java","Python","C++","Python"]
print(programming_languages.index("Python"))
#output
#1
在 programming_languages
列表中有正在搜索的 “Python” 字符串的三个实例。
作为一种测试方式,你可以向后工作,因为在这种情况下,列表很小。
你可以计算出它们的索引,然后像在前几节中看到的那样引用它们:
programming_languages = ["JavaScript","Python","Java","Python","C++","Python"]
print(programming_languages[1])
print(programming_languages[3])
print(programming_languages[5])
#output
#Python
#Python
#Python
一个在位置 1
,另一个在位置 3
,最后一个在位置 5
。
为什么使用 index()
方法时它们没有显示在输出中?
使用 index()
方法时,返回值只是列表中第一次出现的项目,其余的实例不返回。
index()
方法只返回项目第一次出现的位置的索引。
你可以尝试将可选的 start
和 end
参数传递给 index()
方法。
你已经知道第一次出现从索引 1
开始,因此这可以是 start
参数的值。
对于 end
参数,你可以首先找到列表的长度。
要查找长度,请使用 len()
函数:
print(len(programming_languages))
#output is 6
end
参数的值将是列表的长度减 1。列表中最后一项的索引始终比列表的长度小 1。
因此,将所有这些放在一起,你可以尝试获取该项目的所有三个实例:
programming_languages = ["JavaScript","Python","Java","Python","C++","Python"]
print(programming_languages.index("Python",1,5))
#output
#1
输出仍然只返回第一个实例!
虽然 start
和 end
参数为你的搜索提供了一个位置范围,但使用 index()
方法时的返回值仍然只是列表中第一次出现的项目。
如何获取列表中某个项目的所有出现的索引
使用 for 循环获取列表中某个项目的所有出现的索引
让我们以我们在上面使用的相同示例为例。
该列表出现了三个字符串 “Python”。
programming_languages = ["JavaScript","Python","Java","Python","C++","Python"]
首先,创建一个新的空列表。
这将是存储 “Python” 所有索引的列表。
programming_languages = ["JavaScript","Python","Java","Python","C++","Python"]
python_indices = []
接下来,使用 for
循环。这是一种遍历(或循环)列表的方法,并获取原始列表中的每个项目。具体来说,我们遍历每个项目的索引。
programming_languages = ["JavaScript","Python","Java","Python","C++","Python"]
python_indices = []
for programming_language in range(len(programming_languages)):
你首先使用 for
关键字。
然后创建一个变量,在本例中为 programming_language
,它将在迭代过程中充当原始列表中每个项目的位置的占位符。
接下来,你需要指定 for
循环应执行的迭代次数。
在这种情况下,循环将遍历列表的整个长度,从开始到结束。语法 range(len(programming_languages))
是一种访问列表 programming_languages
中所有项目的方法。
range()
函数接受一个数字序列,这些数字指定它应该开始计数的数字和应该结束计数的数字。
len()
函数计算列表的长度,因此在这种情况下,计数将从 0
开始并在 6
结束(但不包括 6
)。
最后,你需要设置一个逻辑条件,表达:“如果在迭代期间,给定位置的值等于 ‘Python’,则将该位置添加到我之前创建的新列表中”。
你使用 append()
方法将元素添加到列表中。
programming_languages = ["JavaScript","Python","Java","Python","C++","Python"]
python_indices = []
for programming_language in range(len(programming_languages)):
if programming_languages[programming_language] == "Python":
python_indices.append(programming_language)
print(python_indices)
#output
#[1, 3, 5]
使用列表推导式和 enumerate() 函数获取列表中某个项目的所有出现的索引
查找特定项目所有出现的索引的另一种方法是使用列表推导式。
列表推导是一种基于现有列表创建新列表的方法。
以下是如何使用列表推导获取每次出现的字符串 “Python” 的所有索引:
programming_languages = ["JavaScript","Python","Java","Python","C++","Python"]
python_indices = [index for (index, item) in enumerate(programming_languages) if item == "Python"]
print(python_indices)
#[1, 3, 5]
使用 enumerate()
函数,你可以存储满足你设置的条件的项目的索引。
它首先为列表(programming_languages
)中的每个元素提供一对(index, item
),作为参数传递给函数。
index
是列表项的索引号,item
是列表项本身。
然后,它充当一个计数器,从 0
开始计数,并在每次满足你设置的条件时递增,选择并移动满足你条件的项目的索引。
与列表推导式配对,使用字符串 “Python” 的所有索引创建一个新列表。
总结
好啦,你现在知道了在 Python 的列表中查找项目索引的一些方法,以及查找项目多次出现的索引的方法。
我希望你觉得这篇文章有用。
要了解有关 Python 编程语言的更多信息,请查看 freeCodeCamp 的 Python 和科学计算认证。你将从基础开始,通过对初学者友好的互动方式来学习。最后,你还将构建五个项目以巩固所学的知识。
感谢你阅读本文,祝你编程愉快!