用 Python 查找列表中元素的所有索引
Manav Narula
2023年1月30日
2021年2月7日
-
使用
for
循环查找元素的所有出现的指数 -
使用
numpy.where()
函数查找 Python 中一个元素的所有出现的索引 -
使用
more_itertools.locate()
函数查找元素的所有出现的指数
在 Python 中,列表用于在一个名称下存储多个元素。每个元素可以通过它在列表中的位置来访问。一个元素可以出现在列表中的多个位置。
在本教程中,我们将介绍如何查找列表中特定元素的所有出现的索引。我们将在下面的列表中查找元素 1
的所有索引。
l1 = [1, 5, 1, 8, 9, 15, 6, 2, 1]
使用 for
循环查找元素的所有出现的指数
我们可以很容易地对列表进行迭代,并将每个元素与所需元素进行比较,并找到其索引。我们可以将最终结果存储在一个新的列表中。在下面的例子中,我们使用 range()
函数对列表进行迭代。
l1 = [1, 5, 1, 8, 9, 15, 6, 2, 1]
pos = []
x = 1 #The required element
for i in range(len(l1)):
if l1[i] == x:
pos.append(i)
print(pos)
输出:
[0, 2, 8]
实现上述代码的更高效、更紧凑的方法是使用下面的列表推导。
l1 = [1, 5, 1, 8, 9, 15, 6, 2, 1]
pos = [i for i in range(len(l1)) if l1[i]==1]
print(pos)
输出:
[0, 2, 8]
同样,我们也可以使用 enumerate()
函数,将索引和值一起返回。比如说
l1 = [1, 5, 1, 8, 9, 15, 6, 2, 1]
pos = [i for i, x in enumerate(l1) if x == 1]
print(pos)
输出:
[0, 2, 8]
使用 numpy.where()
函数查找 Python 中一个元素的所有出现的索引
NumPy
库有 where()
函数,用于根据某些条件返回一个数组中元素的索引。对于这个方法,我们必须将列表作为一个数组传递。最终的结果也是以数组的形式出现。下面的代码片段展示了我们如何使用这个方法。
import numpy as np
l1 = [1, 5, 1, 8, 9, 15, 6, 2, 1]
pos = np.where(np.array(l1) == 1)[0]
print(pos)
输出:
[0 2 8]
使用 more_itertools.locate()
函数查找元素的所有出现的指数
more_itertools
是一个第三方的方便模块。它有许多功能,可以在处理可迭代元素时创建高效和紧凑的代码。该模块中的 locate()
函数返回条件为 True
的元素的索引。它返回一个 itertools
对象。下面的代码片段解释了我们如何使用这个方法。
from more_itertools import locate
l1 = [1,5,1,8,9,15,6,2,1]
pos = list(locate(l1, lambda x: x == 1))
print(pos)
输出:
[0, 2, 8]
我们使用 list()
函数来确保最终结果是一个列表的形式。
Author: Manav Narula
Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.
LinkedIn