【问题标题】:Find and print all indices of the minimum value in a list [duplicate]查找并打印列表中最小值的所有索引[重复]
【发布时间】:2020-05-08 21:40:36
【问题描述】:

我有一个数字列表,我想打印可以找到最小值的所有索引。

我的尝试:

myList = [3, 2, 5, 7, 2, 4, 3, 2]

minValue = min(my_list)

my_list.count(minValue)

if mylist.count(minValue) > 1:
    for num in mylist:
        if num == minValue :
            print(my_list.index(minValue))

实际结果:

1
1
1

预期结果:

1
4
7

我做错了什么?

【问题讨论】:

  • 使用for idx, num in enumerate(myList): if num == minValue: print(idx)
  • index(minValue) 将始终为您提供与 minValue 匹配的第一个索引

标签: python list


【解决方案1】:

注意您的列表在所有地方都有相同的名称,我在示例中为您解决了这个问题。您的问题可以通过在 for 循环中使用 enumerate() 来解决。

my_list = [3, 2, 5, 7, 2, 4, 3, 2]

minValue = min(my_list)

my_list.count(minValue)

if my_list.count(minValue) > 1:
    for i, num in enumerate(my_list):
        if num == minValue :
            print(i)

您的问题是打印 my_list.index(minValue),它总是返回 minValue 的第一个实例,因此解决方案是为每个匹配 minValue 的项目打印 for 循环所在的当前索引。

【讨论】:

    【解决方案2】:

    .index() 返回传递给它的元素第一次出现的索引。你可以使用enumerate

    >>> my_list = [3, 2, 5, 7, 2, 4, 3, 2]
    >>> min_val=min(my_list)
    >>> for idx,val in enumerate(my_list):
            if val==min_val:
                print(idx)
    

    使用range

    >>> my_list=[3, 2, 5, 7, 2, 4, 3, 2]
    >>> min_val=min(my_list)
    >>> for i in range(len(my_list)):
        if my_list[i]==min_val:
            print(i)        
    1
    4
    7
    

    正如Corentin Limier 在 cmets 中所建议的那样。你应该使用enumerate 而不是rangeReference link.

    如果你想存储min值的索引,上面可以写成列表理解

    min_val=min(my_list)
    min_indices=[idx for idx,val in enumerate(my_list) if val==min_val]
    print(*min_indices,sep='\n')
    

    输出

    1
    4
    7
    

    这是numpy 方法。

    import numpy as np
    
    my_list=np.array([3, 2, 5, 7, 2, 4, 3, 2])
    x=np.where(my_list==my_list.min())
    print(x)
    print(*x[0],sep='\n')
    

    输出

    (array([1, 4, 7], dtype=int64),)
    1
    4
    7
    

    【讨论】:

    • 为什么你应该使用 enumerate over range stackoverflow.com/questions/24150762/…
    • @CorentinLimier 感谢您的洞察力。
    • @CorentinLimier 感谢您抽出宝贵时间改进答案。编辑了答案。
    【解决方案3】:

    使用 numpy 怎么样?

    np.argwhere(np.array(my_list)==min_value)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-29
      • 1970-01-01
      • 2017-11-19
      • 1970-01-01
      • 2016-09-06
      • 2021-09-15
      相关资源
      最近更新 更多