【问题标题】:How to get all indexes of a value that occurs multiple times in a list? [closed]如何获取列表中多次出现的值的所有索引? [关闭]
【发布时间】:2021-08-27 13:32:46
【问题描述】:

我有一个很长的列表,其中每个元素可以是 1 到 30 之间的数字,我需要获取所有 1、所有 2、所有 3 的索引......直到 30。我想我可以只使用索引() 并循环遍历 30,但该函数似乎只查找指定元素的第一次出现。谁能帮我解决这个问题?

【问题讨论】:

  • 检查enumerate
  • 请贴出试图“循环跨越 30”的代码。

标签: python list indexing


【解决方案1】:

试试这个:

dct = {}
for j in range(1,31):
    dct[j] = [i for i, x in enumerate(long_list) if x == j]

【讨论】:

  • 工作就像一个魅力,非常感谢!
  • @DavidH,欢迎兄弟 :)))
【解决方案2】:

这可以通过使用enumerate 来实现。

示例代码如下:

for j in range(1, 30):
    print([i for i, e in enumerate([1,5,25,30]) if e == j])

【讨论】:

    【解决方案3】:

    好吧,您确实可以使用index 方法。 index 方法还接受它开始查找指定元素的起始位置(如官方docs 中所述。可以这样做:

    def index_all(x, l):
        indices = []
        start = 0
        while start < len(l):
            try:
                i = l.index(x, start)
                indices.append(i)
                start = i + 1
            except ValueError:
                break
    
        return indices
    

    但是,如果您要查找多个值,而不仅仅是一个,则这可能不是执行此操作的最佳方法,因为您可以在一次运行中获取所有元素的索引。上面的代码在一般情况下实现了这一点,即使不是列表中的所有元素都是必需的。

    def index_many(values, l):
        indices = {v: [] for v in values}
        for i, x in enumerate(l):
            if x in indices:
                indices[x].append(i)
    
        return indices
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多