我有一个数字列表,例如L=[50, 10, 30]
,在Python中,我想返回一个列表,给出L
中每个元素的顺序索引,其输出如下:{{1} }。
尽管这似乎是一项简单的任务,但该网站上的许多问题(例如here here和here)却是相反的,这意味着< em>排序列表:[2, 0, 1]
,这不是我想要的。
谢谢
编辑:关于重复,我也希望将重复也计算在内(按照出现的顺序绘制图纸)。 [1, 2, 0]
会给[50,30,10,30]
答案 0 :(得分:6)
一个班轮:
l = [50, 30, 10, 30]
numpy.argsort(numpy.argsort(l))
# array([3, 1, 0, 2])
答案 1 :(得分:3)
它是排序顺序的索引列表:
def sort_order(lst):
orders = sorted(list(range(len(lst))), key=lambda x: lst[x])
ret = [0] * len(lst)
for i in range(len(ret)):
ret[orders[i]] = i
return ret
print(sort_order([50, 10, 30]) # [2,0,1]
答案 2 :(得分:1)
枚举和排序两次,如:
L = [50, 10, 30]
x = tuple(k[1] for k in sorted((x[1], j) for j, x in enumerate(
sorted((x, i) for i, x in enumerate(L)))))
print(x)
(2, 0, 1)
答案 3 :(得分:-1)