我有一个数字列表:
myList = [1, 2, 3, 100, 5]
现在,如果我对这个列表进行排序以获得[1, 2, 3, 5, 100]
。我想要的是原始列表中元素按排序顺序的索引,即[0, 1, 2, 4, 3]
-这是MATLAB的排序函数,它同时返回值和索引。
发布于 2012-09-19 08:06:38
如果您使用numpy,则可以使用argsort()函数:
>>> import numpy
>>> numpy.argsort(myList)
array([0, 1, 2, 4, 3])
http://docs.scipy.org/doc/numpy/reference/generated/numpy.argsort.html
这将返回对数组或列表进行排序的参数。
发布于 2011-06-21 17:45:44
myList = [1, 2, 3, 100, 5]
sorted(range(len(myList)),key=myList.__getitem__)
[0, 1, 2, 4, 3]
发布于 2019-07-14 23:45:14
我用perfplot (我的一个项目)对它们做了一个快速的性能检查,发现很难推荐其他东西,除了
np.argsort(x)
(请注意日志刻度):
重现该图的代码:
import perfplot
import numpy as np
def sorted_enumerate(seq):
return [i for (v, i) in sorted((v, i) for (i, v) in enumerate(seq))]
def sorted_enumerate_key(seq):
return [x for x, y in sorted(enumerate(seq), key=lambda x: x[1])]
def sorted_range(seq):
return sorted(range(len(seq)), key=seq.__getitem__)
b = perfplot.bench(
setup=np.random.rand,
kernels=[sorted_enumerate, sorted_enumerate_key, sorted_range, np.argsort],
n_range=[2 ** k for k in range(15)],
xlabel="len(x)",
)
b.save("out.png")
https://stackoverflow.com/questions/6422700
复制相似问题