Python - 获取列表中元素的所有出现的索引

pythonserver side programmingprogramming更新于 2024/1/20 3:54:00

要使用 Python 检索列表中特定元素的所有出现的索引,我们可以使用诸如使用 for 循环、使用列表推导、使用 enumerate() 函数、在 while 循环中使用 index() 方法等方法。在本文中,我们将探索这些不同的方法并执行操作以获取列表中元素的所有出现的索引。

方法 1:使用 for 循环

在此方法中,我们开始遍历列表并将每个元素与所需元素进行比较。如果元素匹配,我们将其索引添加到索引列表中。

算法

  • 初始化一个名为 indices 的空列表来存储出现的索引。

  • 使用 for 循环和 range() 函数遍历列表。

  • 检查索引 i 处的当前元素是否等于所需元素。

  • 如果是,则将索引 i 附加到索引列表。

  • 返回索引列表。

语法

for i in range(len(lst)):
        if lst[i] == element:
            indices.append(i)

此处,在 for 循环中,变量 i 遍历列表的长度,并将列表的每个元素与所需元素进行比较。如果元素匹配,则 indices.append(i) 将索引附加到索引列表。

示例

在下面的示例中,我们查找并打印列表"my_list"中元素"3"的所有出现的索引。使用元素和列表作为参数调用"get_indices()"函数,该函数返回索引列表。然后使用"print()"函数打印此列表。

def get_indices(element, lst):
    indices = []
    for i in range(len(lst)):
        if lst[i] == element:
            indices.append(i)
    return indices
my_list = [3, 5, 2, 3, 8, 3, 1]
element = 3
indices = get_indices(element, my_list)
print(indices)

输出

[0, 3, 5]

方法 2:使用列表推导式

此方法允许我们创建一个新列表,其中包含所需元素的所有出现的索引。

算法

  • 使用列表推导式生成一个新的索引列表。

  • 使用 range() 函数遍历列表。

  • 如果索引处的元素与所需元素匹配,则将索引 i 包含在新列表中。

  • 返回新列表。

语法

[i for i in range(len(lst)) if lst[i] == element]

在这里,列表推导式检查列表中的每个元素并将其与所需元素进行比较。如果匹配,我们可以打印索引。

示例

def get_indices(element, lst):
    return [i for i in range(len(lst)) if lst[i] == element]


my_list = [3, 5, 2, 3, 8, 3, 1]
element = 3
indices = get_indices(element, my_list)
print(indices)

输出

[0, 3, 5]

方法 3:使用 enumerate() 函数

enumerate() 函数是 Python 中的一个有用工具,它简化了列表的迭代,同时跟踪索引和相应的元素。这种方法允许我们直接获取所需元素的所有出现的索引。

算法

  • 利用列表推导创建一个新的索引列表。

  • 使用 enumerate() 函数遍历列表,该函数提供索引 i 和元素 x。

  • 如果元素 x 与所需元素匹配,则将索引 i 包含在新列表中。

  • 返回新列表

语法

def get_indices(element, lst):
    return [i for i, x in enumerate(lst) if x == element]

这里,[i for i, x in enumerate(lst) if x == element] 用于使用 enumerate() 迭代列表 lst 以获取索引和元素,并仅过滤元素与所需元素匹配的索引。

示例

在下面的示例中,我们定义了一个函数 get_indices(),该函数以元素和 lst 作为参数。它使用列表推导来迭代枚举列表 lst 并检查每个元素 x 是否等于给定元素。它返回满足此条件的索引列表。在提供的示例中,使用 element = 3 和 my_list = [3, 5, 2, 3, 8, 3, 1] 调用该函数,结果输出 [0, 3, 5],它们是列表中元素 3 的所有出现的索引。

def get_indices(element, lst):
    return [i for i, x in enumerate(lst) if x == element]

my_list = [3, 5, 2, 3, 8, 3, 1]
element = 3
indices = get_indices(element, my_list)
print(indices)

输出

[0, 3, 5]

方法 4:在 while 循环中使用 index() 方法

查找元素所有出现的索引的另一种方法是将 index() 方法与 while 循环结合使用。此方法可帮助我们逐步定位和记录索引。

算法

  • 初始化一个名为 indices 的空列表来存储出现的索引。

  • 初始化一个值为 −1 的变量索引。

  • 输入一个 while 循环,该循环持续到引发 ValueError。

  • 在循环内部,尝试使用 index() 方法查找所需元素的下一个出现位置。

  • 如果找到匹配项,则将索引附加到索引列表并更新索引变量以继续从下一个位置搜索。

  • 如果未找到匹配项,则引发 ValueError,循环中断。

  • 返回索引列表

语法

index = lst.index(element, index + 1)

此处,index() 方法从索引 index + 1 开始搜索给定元素的第一次出现。它将找到的索引分配给变量 index。这使我们能够通过增加索引并再次搜索来定位元素的后续出现

示例

def get_indices(element, lst):
    indices = []
    index = -1
    while True:
        try:
            index = lst.index(element, index + 1)
            indices.append(index)
        except ValueError:
            break
    return indices

my_list = [3, 5, 2, 3, 8, 3, 1]
element = 3
indices = get_indices(element, my_list)
print(indices)

输出

[0, 3, 5]

结论

在本文中,我们讨论了如何使用 Python 中的不同方法获取列表中元素的所有出现的索引。我们探索了四种不同的方法来实现此任务:使用 for 循环、列表推导、enumerate() 函数和带有 while 循环的 index() 方法。每种方法都有自己的优势,选择取决于个人偏好和手头问题的具体要求。


相关文章