pythonsort参数_Python sort()函数有哪些参数?

小编典典

sort和的参数sorted

双方sort并sorted有三个关键字参数:cmp,key和reverse。

L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*;

cmp(x, y) -> -1, 0, 1

sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list

``

最好使用key和reverse,因为它们比等效的要快得多cmp。

key应该是一个接受项目并返回值进行比较和排序的函数。reverse允许颠倒排序顺序。

使用key参数

您可以operator.itemgetter用作键参数,以按元组中的第二,第三等进行排序。

from operator import itemgetter

a = range(5)

b = a[::-1]

c = map(lambda x: chr(((x+3)%5)+97), a)

sequence = zip(a,b,c)

sort by first item in a tuple

sorted(sequence, key = itemgetter(0))

[(0, 4, ‘d’), (1, 3, ‘e’), (2, 2, ‘a’), (3, 1, ‘b’), (4, 0, ‘c’)]

sort by second item in a tuple

sorted(sequence, key = itemgetter(1))

[(4, 0, ‘c’), (3, 1, ‘b’), (2, 2, ‘a’), (1, 3, ‘e’), (0, 4, ‘d’)]

sort by third item in a tuple

sorted(sequence, key = itemgetter(2))

[(2, 2, ‘a’), (3, 1, ‘b’), (4, 0, ‘c’), (0, 4, ‘d’), (1, 3, ‘e’)]

说明

序列可以包含任何对象,甚至不具有可比性,但是如果我们可以定义一个函数,该函数可以为每个项目进行比较,则可以将该函数的key参数传递给sortor sorted。

itemgetter特别是创建一个从其操作数中获取给定项目的函数。文档中的示例:

之后,f=itemgetter(2)呼叫f(r)返回r[2]。

迷你基准,keyvscmp

出于好奇key和cmp性能的考虑,越小越好:

from timeit import Timer

Timer(stmt=”sorted(xs,key=itemgetter(1))”,setup=”from operator import itemgetter;xs=range(100);xs=zip(xs,xs);”).timeit(300000)

6.7079150676727295

Timer(stmt=”sorted(xs,key=lambda x:x[1])”,setup=”xs=range(100);xs=zip(xs,xs);”).timeit(300000)

11.609490871429443

Timer(stmt=”sorted(xs,cmp=lambda a,b: cmp(a[1],b[1]))”,setup=”xs=range(100);xs=zip(xs,xs);”).timeit(300000)

22.335839986801147

```

因此,排序的速度key似乎至少是的两倍cmp。使用itemgetter而不是lambda x: x[1]使排序更快。

2020-11-18

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值