Моя альтернатива с перечислением:
def argsort(seq):
return [x for x,y in sorted(enumerate(seq), key = lambda x: x[1])]
seq=[5,2,1,10]
print(argsort(seq))
# Output:
# [2, 1, 0, 3]
Лучше использовать ответ от https://stackoverflow.com/users/9990/marcelo-cantos ответ на тему сортировка Python без лямбда-выражений
[i for (v, i) in sorted((v, i) for (i, v) in enumerate(seq))]
Встроенной функции нет, но ее легко собрать из потрясающего Инструменты, которые предоставляет Python:
def argsort(seq):
# http://stackoverflow.com/questions/3071415/efficient-method-to-calculate-the-rank-vector-of-a-list-in-python
return sorted(range(len(seq)), key=seq.__getitem__)
x = [5,2,1,10]
print(argsort(x))
# [2, 1, 0, 3]
Он работает с Python array.array
таким же образом:
import array
x = array.array('d', [5, 2, 1, 10])
print(argsort(x))
# [2, 1, 0, 3]