Нахождение индекса N самых больших элементов в Python Array / List Эффективно
извините заранее, если это дублированный вопрос, я искал эту информацию, но все еще не могне могу найти это.
Можно ли упорядочить пустой массив (или список питонов), используя индексы N самых больших элементов в порядке убывания очень эффективно?
Например, массив:
a = array([4, 1, 0, 8, 5, 2])
Индексы самых больших элементов в порядке убывания дадут (учитывая N = 6, все элементы включены):
8 -> 3
5 -> 4
4 -> 0
2 -> 5
1 -> 1
0 -> 2
result = [3, 4, 0, 5, 1, 2]
Я знаю, как сделать это, используя несколько глупый подход (например, сортировку массива и поиск каждого из N чисел для их индексов), но мне было интересно, есть ли какая-нибудь эффективная библиотека, такая как бутылочное горлышко или heapq, или, возможно, питонический подход, чтобы сделать это очень быстро Я должен применить его в нескольких массивах по 300 тыс. Элементов каждый, чтобыпочему производительность является проблемой.
Заранее спасибо!
ОБНОВИТЬ
Я прочитал ответы и решил рассчитать их, используя 300 КБ случайных целых чисел, вот результаты:
Решение 1: sorted(range(len(a)), key=lambda i:a[i])
время: 230 мс
Решение 2: heapq.nlargest(len(a), zip(a, itertools.count()))
время: 396 мс
Решение 3: heapq.nlargest(len(a), enumerate(a), key=operator.itemgetter(1))
время: 864 мс
Решение 4: def f(a,N): return np.argsort(a)[::-1][:N] (N = len(a))
время: 104 мс
Большое спасибо за быстрые и очень хорошие ответы!