首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Python中获取排序数组的索引

如何在Python中获取排序数组的索引
EN

Stack Overflow用户
提问于 2011-06-21 16:54:42
回答 9查看 281.6K关注 0票数 253

我有一个数字列表:

代码语言:javascript
复制
myList = [1, 2, 3, 100, 5]

现在,如果我对这个列表进行排序以获得[1, 2, 3, 5, 100]。我想要的是原始列表中元素按排序顺序的索引,即[0, 1, 2, 4, 3] -这是MATLAB的排序函数,它同时返回值和索引。

EN

回答 9

Stack Overflow用户

发布于 2012-09-19 08:06:38

如果您使用numpy,则可以使用argsort()函数:

代码语言:javascript
复制
>>> import numpy
>>> numpy.argsort(myList)
array([0, 1, 2, 4, 3])

http://docs.scipy.org/doc/numpy/reference/generated/numpy.argsort.html

这将返回对数组或列表进行排序的参数。

票数 247
EN

Stack Overflow用户

发布于 2011-06-21 17:45:44

代码语言:javascript
复制
myList = [1, 2, 3, 100, 5]    
sorted(range(len(myList)),key=myList.__getitem__)

[0, 1, 2, 4, 3]
票数 86
EN

Stack Overflow用户

发布于 2019-07-14 23:45:14

我用perfplot (我的一个项目)对它们做了一个快速的性能检查,发现很难推荐其他东西,除了

代码语言:javascript
复制
np.argsort(x)

(请注意日志刻度):

重现该图的代码:

代码语言:javascript
复制
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")
票数 35
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6422700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档