【问题标题】:Find the index of an element in a list [duplicate]查找列表中元素的索引[重复]
【发布时间】:2019-12-31 03:50:46
【问题描述】:

我在查找列表中每个相似值的索引时遇到问题。

例子:

b = ["a", "b", "a", "a", "b", "b"]
for x in b:
    if "a" in x:
        print(b.index(x))

我目前的结果:

0
0
0

预期结果:

0
2
3

(在我的实际情况中,我们在一个列表中有 2 到 100 个相似的值,因此 .index 无法正常工作。)

【问题讨论】:

  • 不确定您要做什么。您是否只对查找"a" 的索引感兴趣?
  • 是的,我想学习新的方法,以防万一以后遇到这样的问题。
  • 您可能需要查找内置的enumerate 函数。

标签: python


【解决方案1】:

正确代码:

characters = ["a", "b", "a", "a", "b", "b"]
for i in range(len(characters)):
    if characters[i] == "a":
        print(i)

【讨论】:

    【解决方案2】:

    这是算法问题。 list.index(val) 方法返回要出现的第一个 值的索引。如果你想找到所有相似值的索引,那么你需要改变你的算法。

    一个常见的蛮力方法是这样的:

    b = ["a", "b", "a", "a", "b", "b"]
    for i in range(len(b)):
        if b[i] == 'a':
            print(i)
    

    正如你所说,这可能会输出:

    0
    2
    3
    

    【讨论】:

    • 谢谢,这就是我想要的。
    • 我会在 6 分钟冷却后标记为答案
    • 如前所述,上述方法是蛮力。有比效率/时间/内存更好的代码。
    【解决方案3】:

    相当简单:

    def indices(arr, val):
        return [n for n, x in enumerate(arr) if x == val]
    
    b = ["a", "b", "a", "a", "b", "b"]
    
    print(indices(b, "a"))
    

    【讨论】:

      【解决方案4】:

      使用enumerate:

      [n for n, i in enumerate(b) if i == 'a']
      

      输出:

      [0, 2, 3]
      

      【讨论】:

        猜你喜欢
        • 2022-01-18
        • 1970-01-01
        • 1970-01-01
        • 2018-07-06
        • 2022-11-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多