python - 优化函数以对元组列表进行排序

标签 python optimization sorting

我需要按第一项降序排列元组列表,然后按第二项升序排列元组列表。

为此,我实现了以下功能,但我认为它可能会更快。

>>> compare = lambda a, b: -cmp(b[1], a[1]) if b[0] == a[0] else cmp(b[0], a[0])
>>> sorted([(0, 2), (0, 1), (1, 0), (1, 2)], cmp=compare)
[(1, 0), (1, 2), (0, 1), (0, 2)]

可以优化吗?查看与内置函数的比较:

>>> timeit.Timer(stmt='sorted([(int(random.getrandbits(4)),int(random.getrandbits(4))) for x in xrange(10)], cmp=compare)', setup='import random; compare=compare = lambda a, b: -cmp(b[1], a[1]) if b[0] == a[0] else cmp(b[0], a[0])').timeit(100000)
4.0584850867917339
>>> timeit.Timer(stmt='sorted([(int(random.getrandbits(4)),int(random.getrandbits(4))) for x in xrange(10)])', setup='import random').timeit(100000)
2.6582965153393161

最佳答案

对我来说,使用键而不是比较函数要快一点,而且可以说也更容易阅读:

sorted([(0, 2), (0, 1), (1, 0), (1, 2)], key = lambda x:(-x[0], x[1]))

这需要 Python 2.4 或更新版本。

关于python - 优化函数以对元组列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2034629/

相关文章:

python - Flask app.run 创建实体重复项?

python - 具有 5 个未知参数的最小二乘函数

ios - 分离约束和 UI 元素(UIView、UIButton、UITextField 等)声明以分离 swift 文件

javascript - 如果名称值为空,我需要将其更改为Javascript中数组的末尾

.net - 反转 ListBox 项目(按 "nothing"降序排序)

Python:每个固定时间窗口从 pandas 数据帧中提取行

python - SymPy 是否正确求解此 ODE?

python - gcloud 与 pip install 相关的问题

haskell - Data.Vector.modify 在每次迭代时创建向量副本

node.js - Redis 同时进行 INCR、SORT 和 TTL?