У меня есть список a = [5,3,1,4,10]
. Мне нужно получить индекс двух верхних значений списка из 5 и 10. Существует ли один-liner, который python предлагает для такого случая?
Получить индекс верхних n значений списка в python
Ответ 1
sorted(range(len(a)), key=lambda i: a[i])[-2:]
или
sorted(range(len(a)), key=lambda i: a[i], reverse=True)[:2]
или
zip(*sorted(enumerate(a), key=operator.itemgetter(1)))[0][-2:]
или (для длинных списков)
zip(*heapq.nlargest(2, enumerate(a), key=operator.itemgetter(1)))[0]
Ответ 2
Просто немногочисленная альтернатива:
import numpy as np
[a[i] for i in np.argsort(a)[-2:]]