Python - 获取列表中所有元素出现的位置


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

方法 1:使用 for 循环

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

算法

  • 初始化一个名为 indices 的空列表,用于存储出现位置的索引。

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

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

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

  • 返回 indices 列表。

语法

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

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

示例

在下面的示例中,我们查找并打印列表 '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 的空列表,用于存储出现位置的索引。

  • 初始化一个名为 index 的变量,其值为 -1。

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

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

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

  • 如果未找到匹配项,则会引发 ValueError,循环结束。

  • 返回 indices 列表

语法

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

这里,index() 方法从索引 index + 1 开始搜索给定元素的第一个出现位置。它将找到的索引赋值给变量 index。这允许我们通过递增 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() 方法。每种方法都有其自身的优势,选择取决于个人喜好和手头问题的具体要求。

更新于: 2023年7月18日

10K+ 阅读量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.