#python #list #sorting
#python #Список #сортировка
Вопрос:
У меня есть список Python, и я хочу найти индекс элементов отсортированного списка. Но мне нужно, чтобы индекс запусков единиц был последовательным.
Я пишу следующий код:
import numpy as np
lst = [0., 0., 0., 0., 0., 1., 1., 1., 1., 1., 1., 1., 0., 0., 0., 0., 0., 0., 0., 0.,]
arr = np.array(lst)
print(arr.argsort()[::-1])
Результат таков
[ 9 8 5 6 11 10 7 1 2 3 4 19 18 12 13 14 15 16 17 0]
Но я ожидаю чего-то вроде:
[5 6 7 8 9 10 11 0 1 2 3 4 12 13 14 15 16 17]
или
[11 10 9 8 7 6 5 0 1 2 3 4 12 13 14 15 16 17]
Индекс запусков единиц должен быть последовательным в выходных данных. Какова реализация этой идеи на pythonic?
Ответ №1:
Вы можете enumerate
просмотреть список, а затем отсортировать его по значению. Поскольку сортировка Python стабильна, это приведет к тому, что значения индекса останутся отсортированными так, как они были изначально (т. Е. В порядке возрастания) для аналогичных значений:
lst = [0., 0., 0., 0., 0., 1., 1., 1., 1., 1., 1., 1., 0., 0., 0., 0., 0., 0.]
idxs = [x[0] for x in sorted(enumerate(lst), key=lambda v:-v[1])]
print(idxs)
Вывод:
[5, 6, 7, 8, 9, 10, 11, 0, 1, 2, 3, 4, 12, 13, 14, 15, 16, 17]