获取python中列表的前n个值的索引

har*_*shi 51 python

我有一个清单说a = [5,3,1,4,10].我需要获得列表的前两个值的索引,即5和10.是否有一个python为这种情况提供的单行程?

Fre*_*Foo 81

sorted(range(len(a)), key=lambda i: a[i])[-2:]
Run Code Online (Sandbox Code Playgroud)

要么

sorted(range(len(a)), key=lambda i: a[i], reverse=True)[:2]
Run Code Online (Sandbox Code Playgroud)

要么

zip(*sorted(enumerate(a), key=operator.itemgetter(1)))[0][-2:]
Run Code Online (Sandbox Code Playgroud)

或(对于长名单)

zip(*heapq.nlargest(2, enumerate(a), key=operator.itemgetter(1)))[0]
Run Code Online (Sandbox Code Playgroud)

  • @SteveGon [0,4]是正确的.问题要求前两个值的索引而不是值本身. (5认同)

aik*_*er2 15

只是一个numpy替代品:

import numpy as np

top_2_idx = np.argsort(a)[-2:]
top_2_values = [a[i] for i in top_2_idx]
Run Code Online (Sandbox Code Playgroud)

  • 是的。它也适用于列表。 (2认同)
  • 如果您愿意使用`numpy`,那么使用`argpartition`会比`argsort`更有效。看到这个答案:/sf/answers/1661400681/ (2认同)