上一篇 :python中list.sort方法和内置函数sorted的区别
摘自流畅的Python
Key
参数很妙
list.sort
,sorted
,min
和max
函数的key
参数是一个很棒的设计。
在其它语言里的排序函数需要用户提供一个接收两个参数的比较函数作为参数,像是Python2
里的cmp(a,b)
。
用key
参数能够把事情变得简单高效。说它更简单,是因为只需要提供一个单参数
来提取或计算一个值作为比较大小的标准依据
。而Python2
的这种设计则需要用户写一个返回-1
,0
或1
的双参数函数。
说它更高效,是因为在每个元素上,key
函数只会被调用一次。而双参数比较函数则在每一次两两比较的时候都会被调用。
诚然,在排序的时候,Python
总会比较两个键(key
),但是那一阶段的计算会发生在 C
语言那一层,这样会比调用用户自定义的 Python
比较函数 更快。
另外,key
参数也能让你对一个混有数字字符和数值的列表进行排序。你只需要决定 到底是把字符看作数值,还是把数值看作字符:
>>> l = [28, 14, '28', 5, '9', '1', 0, 6, '23', 19]
>>> sorted(l, key=int)
[0, '1', 5, 6, '9', 14, 19, '23', 28, '28']
>>> sorted(l, key=str)
[0, '1', 14, 19, '23', 28, '28', 5, 6, '9']
下一篇:用bisect来管理已排序的序列
网友评论