Нахождение индекса 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 мс

Большое спасибо за быстрые и очень хорошие ответы!

Ответы на вопрос(4)

Ваш ответ на вопрос