Python sort()函数有哪些参数?

除了,是否还有其他参数,例如:

sortsorted

sortsorted都有三个关键字参数:cmpkeyreverse

L.sort(cmp=None,key=None,reverse=False)——稳定排序*到位*;
化学机械抛光(x,y)——&gt-1, 0, 1
已排序(iterable,cmp=None,key=None,reverse=False)-->新排序列表

最好使用反转,因为它们比等效的cmp工作得快得多

key应该是一个函数,它接受一个项并返回一个值进行比较和排序反向允许反向排序顺序

使用参数

您可以使用操作符.itemgetter作为关键参数,在元组中按第二、第三等项进行排序

范例

&gt&燃气轮机&燃气轮机;从运算符导入itemgetter
&燃气轮机&燃气轮机&燃气轮机;a=范围(5)
&燃气轮机&燃气轮机&燃气轮机;b=a[:-1]
&燃气轮机&燃气轮机&燃气轮机;c=map(λx:chr((x+3)%5)+97),a)
&燃气轮机&燃气轮机&燃气轮机;顺序=zip(a、b、c)
#按元组中的第一项排序
&燃气轮机&燃气轮机&燃气轮机;已排序(序列,键=itemgetter(0))
[(0,4,'d'),(1,3,'e'),(2,2,'a'),(3,1,'b'),(4,0,'c')]
#按元组中的第二项排序
&燃气轮机&燃气轮机&燃气轮机;排序(序列,键=itemgetter(1))
[(4,0,'c'),(3,1,'b'),(2,2,'a'),(1,3,'e'),(0,4,'d')]
#按元组中的第三项排序
&燃气轮机&燃气轮机&燃气轮机;排序(序列,键=itemgetter(2))
[(2,2,'a'),(3,1,'b'),(4,0,'c'),(0,4,'d'),(1,3,'e')]

解释

序列可以包含任何对象,甚至是不可比较的对象,但是如果我们可以定义一个函数来生成我们可以对每个项进行比较的对象,那么我们可以在参数中将此函数传递给排序排序

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

在,f=itemgetter(2)之后,调用f(r)返回r[2]

迷你基准,keyvscmp

出于好奇,keycmp性能相比,越小越好:

&gt&燃气轮机&燃气轮机;从timeit导入计时器
&燃气轮机&燃气轮机&燃气轮机;计时器(stmt=“sorted(xs,key=itemgetter(1))”,setup=“from operator import itemgetter;xs=range(100);xs=zip(xs,xs);”)。timeit(300000)
6.7079150676727295
&燃气轮机&燃气轮机&燃气轮机;计时器(stmt=“sorted(xs,key=lambda x:x[1])”,setup=“xs=range(100);xs=zip(xs,xs);”)。timeit(300000)
11.609490871429443
&燃气轮机&燃气轮机&燃气轮机;计时器(stmt=“排序(xs,cmp=lambda,b:cmp(a[1],b[1])”),setup=“xs=range(100);xs=zip(xs,xs);”)。timeit(300000)
22.335839986801147

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

发表评论