【问题标题】:Get indices of the top N values of a list获取列表的前 N ​​个值的索引
【发布时间】:2012-10-25 14:08:25
【问题描述】:

我有一个列表说a = [5,3,1,4,10]。我需要获取列表前两个值的索引,即510 我会得到[0, 4]。 Python 是否为这种情况提供了一种单行代码?

【问题讨论】:

    标签: python list


    【解决方案1】:
    sorted(range(len(a)), key=lambda i: a[i])[-2:]
    

    sorted(range(len(a)), key=lambda i: a[i], reverse=True)[:2]
    

    import operator
    
    zip(*sorted(enumerate(a), key=operator.itemgetter(1)))[0][-2:]
    

    或者(对于长列表),考虑使用heapq.nlargest

    zip(*heapq.nlargest(2, enumerate(a), key=operator.itemgetter(1)))[0]
    

    【讨论】:

    • 在 Python 3 中,zip 返回一个可迭代对象。所以,最后一个会稍作修改:list(zip(...))[0]
    【解决方案2】:

    只是一个 NumPy 替代方案:

    import numpy as np
    
    top_2_idx = np.argsort(a)[-2:]
    top_2_values = [a[i] for i in top_2_idx]
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-17
    • 2023-01-02
    • 1970-01-01
    • 1970-01-01
    • 2014-12-23
    • 2023-03-13
    • 1970-01-01
    • 2022-06-13
    相关资源
    最近更新 更多