【问题标题】:Find the "n" largest elements in a Python 'list' with duplicate values在具有重复值的 Python“列表”中查找“n”个最大元素
【发布时间】:2019-11-13 14:06:46
【问题描述】:

假设我有一个如图所示的列表:

test= [19, 2, 8, 12, 8]

我把它排序为:

print(sorted([(val, idx) for (idx, val) in enumerate(test)], reverse = True))

输出是:

[(19, 0), (12, 3), (8, 4), (8, 2), (2, 1)]

我想提取前 4 个最大的数字。切片不起作用,因为我在列表中有重复项(8 在索引 2 和 4)

我期望的输出是: (19, 0), (12, 3), (8, 4), (8, 2)

还有其他方法可以完成这项工作吗?

【问题讨论】:

  • 那么在排序前删除重复项?
  • 要求是包含重复并获取最大元素。
  • 如果你被允许使用 numpy,那么也许np.argpartition 是要走的路。
  • 我相信我的问题没有正确地提出。为了更清楚,我将编辑问题

标签: python list


【解决方案1】:

要从列表中获取四个最大的数字,您可以使用:

sorted(sorted(set(test), key=test.index), reverse=True)[:4]
#[19, 12, 8, 2]

编辑

这将为您提供所需的输出:

[i[::-1] for i in sorted(enumerate(test), key=lambda x: x[::-1], reverse=True)][:4]
#[(19, 0), (12, 3), (8, 4), (8, 2)]

【讨论】:

  • 对列表进行切片仅获取前 4 个值,不包括重复项。我需要得到以下信息:(19, 0), (12, 3), (8, 4), (8, 2)
【解决方案2】:

首先通过将列表转换为集合来删除重复项,然后返回列表并对值进行排序。代码:

test= [19, 2, 8, 12, 8]

test_uniques_sorted = lsorted(list(set(test)), reverse = True)
print(test_uniques_sorted)

【讨论】:

    【解决方案3】:

    您可以使用计数器删除重复项

    from collections import Counter
    
    test= [19, 2, 8, 12, 8, 1, 5, 6]
    cnt = Counter(test)
    print(sorted(cnt)[-4:]) #[6, 8, 12, 19]
    

    【讨论】:

    • 我想保留重复广告以获得最高价值。我不想计算出现次数。
    猜你喜欢
    • 2016-10-04
    • 2020-11-02
    • 2016-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-01
    • 2019-02-24
    • 2012-10-20
    相关资源
    最近更新 更多