bcd*_*dan 0 python sorting lambda
我需要对包含元组的列表进行排序.我可以使用它们排序key=lambda.该列表大于1000个元素.
>>> a = [(<object>, 4), (<object>, 5), (<object>, -2)....]
>>> b = sorted(a, key=lambda tup: tup[1])
Run Code Online (Sandbox Code Playgroud)
有没有更快的方法来实现这一目标?
您可以使用itemgetter
>>> from operator import itemgetter
>>> a = [(None, 4), (None, 5), (None, -2)]
>>> b = sorted(a, key=itemgetter(1))
>>> b
[(None, -2), (None, 4), (None, 5)]
Run Code Online (Sandbox Code Playgroud)
现在,如果你想看一下性能,这里是itemgetter:
In [3]: %timeit sorted(a, key=itemgetter(1))
1000000 loops, best of 3: 732 ns per loop
In [4]: %timeit sorted(a, key=lambda tup: tup[1])
1000000 loops, best of 3: 804 ns per loop
Run Code Online (Sandbox Code Playgroud)
所以,对于一个小清单来说,不是太戏剧化.让我们高档这个:
In [1]: import random
In [2]: a = [(i, random.randint(0, 100)) for i in range(100000)]
In [3]: %timeit sorted(a, key=itemgetter(1))
10 loops, best of 3: 30.5 ms per loop
In [4]: %timeit sorted(a, key=lambda tup: tup[1])
10 loops, best of 3: 35.6 ms per loop
Run Code Online (Sandbox Code Playgroud)
所以即使在升级之后仍然是稍快一点的方法.但是,我使用itemgetter,因为它是干净的代码,而不是因为它更快.在性能上编写干净的代码,并在必要时进行优化.1000个元素是没有的:你知道自己在做什么更好.
请记住,过早[或不必要]的优化是万恶之源.特别是对于这样一个小型数据集,需要几毫秒才能完成整个任务.
| 归档时间: |
|
| 查看次数: |
764 次 |
| 最近记录: |