如何按数值降序获取列表中前K个元素的索引?
解决方案
可以用Python内置的sorted()函数结合enumerate()来实现,这是最简洁的写法:
a = [3,5,7,12,4,1,5] k = 3 result = [idx for idx, val in sorted(enumerate(a), key=lambda x: (-x[1], x[0]))[:k]] print(result) # 输出: [3,2,1]
代码说明
enumerate(a)会将列表转换为(索引, 元素值)的元组序列,比如(0,3), (1,5), (2,7), ...sorted()的key参数lambda x: (-x[1], x[0])起到两个作用:-x[1]让元素按数值降序排列(对元素值取负后做升序排序,等价于原数值的降序)x[0]作为次要排序依据,当元素值相同时,按索引升序排列,确保平局时取首次出现的索引
- 最后通过切片
[:k]取前K个元组,再提取其中的索引组成结果列表
内容的提问来源于stack exchange,提问作者S_S
相关产品推荐
相关产品推荐

