Python 列表查找,如何在列表中查找项目或者元素索引

在本文中,你将学习如何在Python中查找列表中包含元素的索引。

有几种方法可以实现这一点,在本文中,你将学习三种不同的方式用于查找列表元素的索引
三种技巧如下:

  • 使用 index() 方法查找索引;
  • 使用 for-loop
  • 使用列表推导式和 enumerate() 函数

Python 列表是什么?

列表是Python中的内置数据类型,也是最强大的数据结构之一。
它可以充当容器,用于存储相同变量名下的多个(通常是相关的)项。
每一个元素都被放置在方括号 [] 内,方括号内的每一项都用 , 隔开。

#  'my_information' 列表变量,包含字符串和数字
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;
  • 第三个列表元素 "伦敦" 的索引为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])

# 输出

#John Doe
#34
#London
#1.76

那么,如何在Python列表中,查找元素的索引呢?

在接下来的部分中,你将看到一些查找列表元素索引的方法

在Python中使用 list 的 Index() 方法查找元素的索引

到目前为止,你已经了解了如何通过引用某个值的索引号来访问该值,但是,当你不知道索引号,而你正在处理一个大的列表时,会发生什么呢?

你可以给出一个值并找到它的索引,这样就可以检查它在列表中的位置,为此,Python内置了 index() 方法被用作搜索工具。 index() 方法的语法如下所示

my_list.index(item, start, end)

让我们来分析一下:

  • my_list:正在搜索的列表的名称;
  • .index() :具备3个参数的搜索方法,一个参数是必需的,另外两个是可选的;
  • item:必需的参数,它是待搜索其索引的元素;
  • start:第一个可选参数,开始搜索的索引。
  • end:第二个可选参数,结束搜索的索引。

让我们来看一个仅使用必须参数的示例:

programming_languages = ["JavaScript","Python","Java","C++"]

print(programming_languages.index("Python"))

# 输出
# 1

在上面的例子中, index() 方法只接受 1 个参数,这个参数就是要查找索引的元素,请记住,传递的参数是区分大小写的,这意味着如果你传递的是 "python" 而不是 "Python" ,你会收到一个错误,因为带有小写 "p""python" 不是列表的一部分。它的返回值是一个整数,这个整数就是传递值的索引。

让我们看另一个例子:

programming_languages = ["JavaScript","Python","Java","C++"]

print(programming_languages.index("React"))

# 输出
# 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")
    
#输出
#That item does not exist

另一种方法是在查找索引之前,先检查元素是否在列表中,输出将是一个布尔值: TrueFalse

programming_languages = ["JavaScript","Python","Java","Python","C++","Python"]

print("React" in programming_languages)

#输出
#False

index() 方法中的可选参数

让我们来看看下面的例子:

programming_languages = ["JavaScript","Python","Java","Python","C++","Python"]

print(programming_languages.index("Python"))

#output
#1

在列表类型的变量 programming_languages 中,有3个待搜索的“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() 方法时,返回值仅为列表中第1个出现的项,其余的不会返回, index() 方法只返回元素第1次出现的位置的索引。
可以尝试将可选的开始结束参数传递给 index() 方法。

你已经知道,第一次出现从索引1开始,所以这可能是 start 参数的值,对于end参数,可以先找到列表的长度。
要查找长度,请使用 len() 函数。

print(len(programming_languages)) 

#output is 6

end 参数的值将是列表的长度减去1,列表中最后一项的索引总是比列表长度小一个,所以,把所有这些放在一起,下面是如何尝试获取该项的所有3个实例。

programming_languages = ["JavaScript","Python","Java","Python","C++","Python"]

print(programming_languages.index("Python",1,5))

#output
#1

输出仍然只返回第一个实例,尽管开始和结束参数为搜索提供了一系列位置,但使用 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开始,列表的结尾结束。

最后,需要设置一个逻辑条件。
本质上,你的目标是:“如果在迭代过程中,给定位置的元素值等于 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() 函数,可以存储满足设置条件的元素的索引。
It first provides a pair (index, item) for each element in the list () that is passed as the argument to the function.
首先它会把列表( programming_languages )中的每一个键值对( (index, item) ),作为参数传递到函数中。
index 表示列表项的索引号, item 表示列表项本身。

然后,它充当一个计数器,从0开始计数,并在每次满足设置的条件时递增,选择并移动符合条件的元素的索引。与列表推导式相结合,它将创建一个包含字符串“Python”的所有索引的新列表。

总结

就在这里!现在,你已经知道了在Python的列表中查找元素索引的一些方法,以及查找元素多次出现的索引的方法。
我希望你觉得这篇文章有用。
感谢阅读和愉快的编码!

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐