如何在 Python 中获取元素所有出现的索引?

2024 年 8 月 29 日 | 4 分钟阅读

在本教程中,我们将探讨如何使用各种 Python 函数来定位给定列表中某个元素的每个实例的索引。找到列表中元素的初始索引通常很简单。查找对象的所有列表索引可能很有用,因为 Python 列表可能包含重复的对象。

如何使用 Python 确定列表中每个实例的索引

  • For 循环和 enumerate,
  • more_itertools,
  • numpy,
  • 列表推导式,
  • itertools

使用 For 循环和 Enumerate

使用 Python for 循环以及 Python enumerate 工具是获取给定 Python 列表中某个元素所有实例索引列表的最简单方法之一。在迭代对象时,enumerate 方法会返回元素及其索引。因此,我们可以检查元素是否等于我们要查找的元素。如果是,我们可以将该项的位置包含在一个单独的列表中。让我们用一个例子来理解它是如何工作的。

使用 For 循环和 Enumerate

代码

输出

The element is present at these indices:  [0, 3, 7, 9]

使用 more_itertools

more_itertools 库包含许多有用的函数。locate() 方法是其中之一,它接受一个 Python 可迭代数据结构和一个用于比较的内置或用户定义函数。

我们可以使用一个匿名函数,称为 lambda 函数,该函数确定一个项是否等于我们要比较的项,以获取与给定元素匹配的所有项的索引位置。

让我们通过一个例子来理解这一点

代码

输出

The element is present at these indices:  [0, 3, 7, 9]

使用 Numpy

使用 NumPy 可以轻松快速地获取列表中某个元素的所有索引位置。我们可以为此使用 where() 方法。where() 方法返回给定数组中与指定值匹配的每个元素的索引值。

让我们通过一个例子来理解这一点

代码

输出

The element is present at these indices:  [0, 3, 7, 9]

使用列表推导式

在本节中,我们将研究如何使用 Python 列表推导式来获取列表中给定元素的索引列表。除了使用列表推导式之外,这种方法的功能与基于循环的第一种方法完全相同。

让我们看看如何将之前创建的 for 循环转换为 Python 列表推导式

代码

输出

The element is present at these indices:  [0, 3, 7, 9]

Itertools 模块

我们将使用 itertools 库中的 count() 函数,因为它们是内存高效的实用工具,可以单独或组合使用。它们将生成一个从起始整数开始的等间隔值的迭代器。为此,我们将首先构建一个列表,然后使用列表推导式和 zip(),我们将获得列表中某个元素所有实例的索引。

代码

输出

The element is present at these indices:  [0, 3, 7, 9]