我有一个数字列表:

myList = [1, 2, 3, 100, 5]

现在如果我对这个列表进行排序得到[1,2,3,5,100]。 我想要的是元素的下标 原始列表的排序顺序,即[0,1,2,4,3] ——ala MATLAB的排序函数,返回两者 值和索引。


当前回答

首先把你的列表转换成这样:

myList = [1, 2, 3, 100, 5]

为列表的项添加索引

myList = [[0, 1], [1, 2], [2, 3], [3, 100], [4, 5]]

下一个:

sorted(myList, key=lambda k:k[1])

结果:

[[0, 1], [1, 2], [2, 3], [4, 5], [3, 100]]

其他回答

将numpy导入为np

对指数

S=[11,2,44,55,66,0,10,3,33]

r=np.argsort(S)

[output]=array([5, 1, 7, 6, 0, 8, 2, 3, 4])

argsort按顺序返回S的索引

价值

np.sort(S)

[output]=array([ 0,  2,  3, 10, 11, 33, 44, 55, 66])

使用enumerate的答案很好,但我个人不喜欢用lambda来按值排序。下面的操作只是倒转索引和值,并对其排序。首先是按值排序,然后是按下标排序。

sorted((e,i) for i,e in enumerate(myList))

首先把你的列表转换成这样:

myList = [1, 2, 3, 100, 5]

为列表的项添加索引

myList = [[0, 1], [1, 2], [2, 3], [3, 100], [4, 5]]

下一个:

sorted(myList, key=lambda k:k[1])

结果:

[[0, 1], [1, 2], [2, 3], [4, 5], [3, 100]]

代码:

s = [2, 3, 1, 4, 5]
li = []

for i in range(len(s)):
    li.append([s[i], i])
li.sort()
sort_index = []

for x in li:
    sort_index.append(x[1])

print(sort_index)

试试这个,对我有用,干杯!

像下面这样:

>>> myList = [1, 2, 3, 100, 5]
>>> [i[0] for i in sorted(enumerate(myList), key=lambda x:x[1])]
[0, 1, 2, 4, 3]

enumerate(myList)给你一个包含(index, value)元组的列表:

[(0, 1), (1, 2), (2, 3), (3, 100), (4, 5)]

通过将列表传递给sorted并指定一个函数来提取排序键(每个元组的第二个元素;这就是的意义。最后,使用[i[0] for i in…列表理解。