我有一个数字列表:
myList = [1, 2, 3, 100, 5]
现在如果我对这个列表进行排序得到[1,2,3,5,100]。 我想要的是元素的下标 原始列表的排序顺序,即[0,1,2,4,3] ——ala MATLAB的排序函数,返回两者 值和索引。
我有一个数字列表:
myList = [1, 2, 3, 100, 5]
现在如果我对这个列表进行排序得到[1,2,3,5,100]。 我想要的是元素的下标 原始列表的排序顺序,即[0,1,2,4,3] ——ala MATLAB的排序函数,返回两者 值和索引。
当前回答
更新的答案与枚举和项目getter:
sorted(enumerate(a), key=lambda x: x[1])
# [(0, 1), (1, 2), (2, 3), (4, 5), (3, 100)]
将列表压缩在一起:元组中的第一个元素是索引,第二个元素是值(然后使用元组x[1]的第二个值对其排序,x是元组)
或者使用来自operatormodule '的itemgetter:
from operator import itemgetter
sorted(enumerate(a), key=itemgetter(1))
其他回答
将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])
myList = [1, 2, 3, 100, 5]
sorted(range(len(myList)),key=myList.__getitem__)
[0, 1, 2, 4, 3]
像下面这样:
>>> 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…列表理解。
我们将创建另一个从0到n-1的索引数组 然后压缩到原始数组,然后根据原始值对其排序
ar = [1,2,3,4,5]
new_ar = list(zip(ar,[i for i in range(len(ar))]))
new_ar.sort()
`
首先把你的列表转换成这样:
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]]