【问题标题】:In Python, how can I get the indices of the 5 greatest values of a list? [duplicate]在 Python 中,如何获取列表的 5 个最大值的索引? [复制]
【发布时间】:2016-08-04 16:26:38
【问题描述】:

我有一个简单的清单:

a = [8, 5, 2, 20, 13, 14, 17, 13, 15, 21]

我可以得到列表中的 5 个最大值:

sorted(a)[-5:]

我如何获得列表中 5 个最大值的索引

因此,列表中的 5 个最大值是 [14, 15, 17, 20, 21],它们位于索引 [9, 3, 6, 8, 5]。我敢肯定,如果存在重复值,则可以考虑多种策略,如果它们接近其他重要值,则可能是给出它们的索引。

【问题讨论】:

标签: python list max slice indices


【解决方案1】:

你可以试试这个:

[x[0] for x in sorted(enumerate(a), key=lambda x: x[1])[-5:]]

【讨论】:

  • 绝对更好,因为它可以处理欺骗值。
【解决方案2】:

你可以这样做:

[a.index(x) for x in sorted(a)[-5:]]

访问文档并检查index 函数。

【讨论】:

  • 谁将此标记为坏的?这个解决方案有什么问题?
  • @sedavidw 我真的很想知道.. 这很糟糕而且很伤心。如果不解释否决票,我无法知道我的错误。
  • .index(x) 在重复的情况下既低效又不正确。不过我没有投反对票。
  • @Maroun,很好的答案,但是尝试a = [1,1,1,1,2,2,2,3,3] ... index 总是不受欢迎,因为它对欺骗失败。 (imo,虽然不值得投反对票,也不值得投赞成票)
  • 感谢您的解释!
【解决方案3】:

len(sorted(a)) - 1 这将为您提供最大元素的索引。

len(sorted(a)) - 2 然后会给你第二大元素,依此类推

【讨论】:

  • 但仅限于排序后的数组...
【解决方案4】:

嗯,这部分取决于您的列表中是否有重复值。

如果没有重复值,我认为最简单的答案可能是按照您提到的方式获取最大值,然后对于每个值,使用列表的index 方法找到该值的索引: [1,2,3].index(3)

【讨论】:

    【解决方案5】:

    简答:

     map(itemgetter(0), sorted(enumerate(lst), key=itemgetter(1), reverse=True))[:5]
    

    作为一个函数:

    from operator import itemgetter
    
    def get_top_indices(lst, qnt=5):
        return map(itemgetter(0), sorted(enumerate(lst), key=itemgetter(1), reverse=True))[:qnt]
    

    例子:

    >>> get_top_indices([8, 5, 2, 20, 13, 14, 17, 13, 15, 21])
    [9, 3, 6, 8, 5]
    

    【讨论】:

      【解决方案6】:
      a = [8, 5, 2, 20, 13, 14, 17, 13, 15, 21]
      b = sorted(a)[-5:]
      
      c = [i for i , x in enumerate(a) if x in b]
      

      【讨论】:

        猜你喜欢
        • 2019-03-25
        • 2019-09-30
        • 2017-03-15
        • 2011-03-10
        • 2014-07-09
        • 2022-01-05
        • 2019-06-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多