【问题标题】:Find smallest number and its index [duplicate]找到最小的数字及其索引[重复]
【发布时间】:2018-06-10 21:20:34
【问题描述】:
l = [0,1,2,0,3]

我想找到 l 的最小数和它的索引,应该给

(0,0),(0,3)

我所做的是

def find_smallest(xy):
    return (np.min(xy), xy.index(min(xy)))

find_smallest([0,1,2,0,3])

给出 (0,0)

【问题讨论】:

  • np.where(l == np.min(xy)) 提供的 l 是一个 numpy 数组。

标签: python list indexing min


【解决方案1】:
def find_smallest(xy):
    minimum=np.min(xy)
    index=0
    indexes=[]
    minimums=[]
    for item in xy:
        if item==minimum:
            minimums.append(minimum)
            indexes.append(index)
        index+=1
    return tuple(minimums),tuple(indexes)

find_smallest([0,1,2,0,3])

这个应该可以的

【讨论】:

    【解决方案2】:

    一个例子:

    l = [0,1,2,0,3]
    
    def find_smallest(xy):
        smallest = min(xy)
        return [(j, i) for i, j in enumerate(xy) if j==smallest]
    
    find_smallest(l)
    

    【讨论】:

      【解决方案3】:

      您只返回第一个匹配项,您应该在迭代第一个列表时建立一个列表。

      def find_smallest(xy):
          m = None
          matches = []
          for i, n in enumerate(xy):
              if n == m:
                  matches.append((n, i))
              if m is None or n < m:
                  m = n
                  matches = [(n, i)]
          return matches
      
      print(find_smallest([0,1,2,0,3]))  # [(0, 0), (0, 3)]
      print(find_smallest([6,0,1,2,0,3]))  # [(0, 1), (0, 4)]
      

      【讨论】:

      • @SurrealDreams 谢谢,但这确实有效。第 8 行有一个错字,应该是 m = n 而不是 m = i,但我刚刚修正了这个问题。
      • 它确实适用于您的编辑。我花了一分钟来了解它是如何工作的,因为它会在知道最小值之前立即开始构建结果列表,但每次它找到一个较小的值时,它都会重置结果列表。这是一种有趣的方法,您只需对列表进行一次迭代。
      猜你喜欢
      • 2018-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-06
      • 2016-11-05
      • 2018-05-16
      • 1970-01-01
      相关资源
      最近更新 更多