【问题标题】:Giving index number for nth largest value in list Python为列表 Python 中的第 n 个最大值提供索引号
【发布时间】:2016-04-25 08:51:52
【问题描述】:

使用列表a = [1, 2, 3, 5, 4] 我希望找到第n 个最大值的索引。 function(a, 4) = 2 因为 2 是第 4 个最大值的索引。注意:需要对包含 500 个或更多元素的列表起作用,并且可以使用循环。

【问题讨论】:

  • 请解释您尝试过的内容(如果可能,请附上代码)
  • 您能用代码示例更好地解释您要完成的工作吗?也许您可以使用任何内置的 python 以不同的方式解决它。
  • 我对您对索引一词的使用感到困惑。第四大值为 2,其索引为 1。请编辑您的问题以使其有意义。
  • 此列表中没有第 5 个索引。如果您执行 [5],则会出现索引错误

标签: python list indexing


【解决方案1】:

您可以索引sorted(a) 的结果以找到第n 个最大值:

>>> a = [1, 2, 3, 5, 4]
>>> n = 4
>>> x = sorted(a)[-n]
>>> x
2

然后使用a.index()在原始列表中查找元素的索引(假设元素是唯一的):

>>> a.index(x) + 1  # use 1-based indexing
2

附:如果n 很小,你也可以使用heapq.nlargest() 来获取第n 个最大的元素:

>>> import heapq
>>> heapq.nlargest(n, a)[-1]
2

【讨论】:

    【解决方案2】:

    如果不使用索引和最大值(最简单的方法),我会:

    def funcion (a):
         highest_value = [0, position]
         for x in range(len(a),0,-1):
             value = a.pop()
             if value > highest_value[0]:
                 highest_value[0] = value
                 highest_value[1] = len(a)-x
          return highest_value
    

    这样,您将获得最高值并同时将其保存为索引,因此应该非常有效。使用 pop 比从 0 到结尾查看要快得多,因为访问是向后的。

    【讨论】:

      【解决方案3】:

      我认为您使用的是基于 1 的索引。假设值是唯一的。

      a.index(sorted(a)[4-1])+1
      

      会给你 5 个。

      【讨论】:

        猜你喜欢
        • 2019-02-17
        • 2017-09-25
        • 2018-05-20
        • 1970-01-01
        • 1970-01-01
        • 2012-07-16
        • 1970-01-01
        • 2022-06-13
        • 2019-08-31
        相关资源
        最近更新 更多