【问题标题】:finding all occurences of a minimum value in a list using for loop使用 for 循环查找列表中所有出现的最小值
【发布时间】:2020-04-09 04:41:02
【问题描述】:

抱歉,如果已经有人问过这个问题,但我似乎无法找到我正在寻找的答案,那么他们都涉及使用我们尚未被允许使用的工具。 问题是我必须使用 for 循环来遍历列表并找到最小值,然后返回该值的索引。那部分我没问题,我遇到的问题是如何让程序返回所有出现的最小值?

限制 我不能使用 enumerate 或其他此类函数,我可以使用 min 函数,但仅此而已,它必须在 for 循环中完成。

任何帮助将不胜感激,谢谢!

n = [1, 2, 3, -50, -60, 0, 6, 9, -60, -60]
for i in n:
    min_val = []
    item = min(n)
    item_index = n.index(item)
    min_val.append(item_index)

print(min_val)

【问题讨论】:

标签: python list for-loop min


【解决方案1】:

我假设这是 python,所以你可以使用 numpy

import numpy as np

n = np.array([1, 2, 3, -50, -60, 0, 6, 9, -60, -60])
searchKey = -60
item_index = np.where(n == searchKey)[0]
item_index => array([4, 8, 9])

如果您不提前知道最小值,您可以使用这样的 for 循环:

minval = n[0]
for i in n:
    if i < minval:
         minval = i

然后只需将searchKey 替换为上面的minval

免责声明:n 的类型为 np.array 而不是列表,不确定这对您是否重要,但如果是,我可以发布一个不使用枚举的不太雄辩的列表解决方案。

【讨论】:

    【解决方案2】:

    解决方法如下:

    n = [1, 2, 3, -50, -60, 0, 6, 9, -60, -60]
    for i in n:
        min_count = n.count(min(n)) # getting a count of the number of minimum values
        min_value = min(n)
        min_index_list = []
        for j in range(min_count):
            min_index = n.index(min_value)
            min_index_list.append(min_index)
            n[min_index] += 1
        break
    
    print(min(n) - 1, min_index_list)
    

    【讨论】:

      【解决方案3】:

      下面的list Comprehension 将在一行中完成工作

      min_val_idxs = [ x for x in range(len(n)) if n[x] == min(n)]
      

      【讨论】:

        【解决方案4】:

        使用for-loop:

        • 创建一个空列表,indices
          • 这是在循环之前/循环之外完成的,否则每次迭代都会重置列表。
        • 使用for i in range(len(x)): 创建循环,它本质上是遍历索引位置列表[0, 1, 2, 3, ..., len(x)-1]
          • for i in n: 只是遍历列表中的每个值
        • 在循环中,将任何i(其中x[i]min(x) 匹配)添加到列表中
        def get_indices(x: list) -> list:
            indices = list()
            min_val = min(x)
            for i in range(len(x)):
                if x[i] == min_val:
                    indices.append(i)
            return indices
        
        
        print(get_indices(n))
        
        >>> [4, 8, 9]
        

        【讨论】:

          猜你喜欢
          • 2018-09-21
          • 1970-01-01
          • 1970-01-01
          • 2016-08-05
          • 2018-08-17
          • 2019-09-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多