Óla*_*ron 9 python sorting list
我正在编写一个函数,它接受一个整数列表并返回一个相对定位元素的列表.
也就是说,如果我对所述函数的输入是[1,5,4],则输出将是[0,2,1],因为1是最低元素,5是最高元素,4是中间,所有元素是唯一值,还是一组()
但代码说话,我到目前为止的功能是
def relative_order(a):
    rel=[]
    for i in a:
        loc = 0
        for v in a:
            if i > v:
                loc += 1
        rel.append(loc)
    return rel
它确实有效,但由于我将大型列表发送到此函数中,并且我必须将每个元素与每次迭代中的所有元素进行比较,因此需要大约5秒来使用10.000个元素的列表.
我的问题是如何提高所述功能的速度,也许更多Pythonic,我尝试了理解列表,但我的Python技能缺乏,我只想出了实现这个问题的必要方法.
Ósc*_*pez 12
这可以写成列表理解,如下所示:
lst = [1, 5, 4]
s = sorted(lst)    
[s.index(x) for x in lst]
=> [0, 2, 1]
这是另一个测试,使用@ frb的例子:
lst = [10, 2, 3, 9]
s = sorted(lst)    
[s.index(x) for x in lst]
=> [3, 0, 1, 2]
Jon*_*nts 11
这是另一个应该更高效的保持.index进入列表,因为它声明不会发生重复值,所以我们可以执行查找O(1)而不是线性...(并且实际上满足要求):
>>> a = [10, 2, 3, 9]
>>> indexed = {v: i for i, v in enumerate(sorted(a))}
>>> map(indexed.get, a)
[3, 0, 1, 2]
| 归档时间: | 
 | 
| 查看次数: | 4067 次 | 
| 最近记录: |