如何返回列表中每个元素的顺序索引?

时间:2019-01-03 04:40:23

标签: python sorting indexing

我有一个数字列表,例如L=[50, 10, 30],在Python中,我想返回一个列表,给出L中每个元素的顺序索引,其输出如下:{{1} }。

尽管这似乎是一项简单的任务,但该网站上的许多问题(例如here herehere)却是相反的,这意味着< em>排序列表:[2, 0, 1],这不是我想要的。

谢谢

编辑:关于重复,我也希望将重复也计算在内(按照出现的顺序绘制图纸)。 [1, 2, 0]会给[50,30,10,30]

4 个答案:

答案 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)

使用字典。

L = [50, 10, 30, 10, 30]
d = {counter:value for counter,value in enumerate(L)} #L is your list
sorteddict = sorted(d.items(), key=lambda x: x[1])
d2 = {counter:value for counter,value in enumerate(sorteddict)}
order_index = {d2[i][0]:i for i in d2}
print(order_index.values())

enter image description here