如何获得Python中排序数组的索引
我有一个数字列表:
myList = [1, 2, 3, 100, 5]
现在如果我把这个列表排序,得到 [1, 2, 3, 5, 100]
。
我想要的是这些元素在原始列表中的位置,也就是按照排序后的顺序,得到 [0, 1, 2, 4, 3]
—— 就像MATLAB的sort函数,它可以同时返回值和索引。
18 个回答
在编程中,有时候我们需要处理一些数据,比如从一个地方获取信息,然后在另一个地方使用这些信息。这就像你从冰箱拿出食材,然后在厨房里做饭一样。
当我们在代码中写东西时,有些时候会遇到错误或者问题。就像在做饭时,可能会忘记加盐,或者把食材放错地方。这些错误会让我们的程序无法正常运行。
为了让程序顺利运行,我们需要仔细检查每一步,确保所有的东西都在正确的位置,并且按照正确的顺序进行。这样才能做出美味的菜肴,或者在编程中,才能让程序正常工作。
如果你在编程时遇到问题,不要着急,慢慢来,仔细检查每一行代码,看看哪里可能出错了。就像做饭时,检查一下食材和步骤,确保一切都准备好了。
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)
会给你一个包含元组的列表,每个元组里有两个东西:一个是索引(位置),一个是值(内容):
[(0, 1), (1, 2), (2, 3), (3, 100), (4, 5)]
你可以通过把这个列表传给 sorted
来进行排序,并且指定一个函数来提取排序的关键(每个元组的第二个元素;这就是 lambda
的作用)。最后,使用 [i[0] for i in ...]
这种列表推导式来提取每个 sorted 元素的原始索引。
如果你在使用numpy这个库,你可以使用一个叫做argsort()的函数:
>>> import numpy
>>> numpy.argsort(myList)
array([0, 1, 2, 4, 3])
http://docs.scipy.org/doc/numpy/reference/generated/numpy.argsort.html
这个函数会返回一个结果,告诉你如何对数组或列表进行排序,也就是说,它会给出排序所需的索引。