在Python2.4中,可以传递自定义比较器进行排序
让我们看看清单-
列表=[5,1,2,3,6,0,7,1,4]
要先按偶数排序,然后按赔率排序,我们可以执行以下操作-
evenfirst=lambda x,y:1如果x%2>;y%2其他-1如果y%2>;x%2其他x-y
list.sort(cmp=evenfirst)
列表==[0,2,4,6,1,1,3,5,7]#正确
在Python3中,只能传递键(Python2.4中也支持该键)
当然,在Python3中,使用右键也可以实现相同的排序:
list.sort(key=lambda x:[x%2,x])
我对不再支持自定义比较器的决定感到好奇,尤其是当它看起来可以很容易实现的时候
在所有或大多数情况下,所需的排序顺序是否都有一个自然的键
例如,在上面的示例中,存在这样一个键——实际上,使用它代码变得更加简洁。总是这样吗
(我知道将比较器转换为键的方法,但理想情况下,如果可以将其内置到语言中,就不必采取这种变通方法。)
表演
每当排序算法需要比较两个元素时,就会调用cmp函数
相反,键对象可以被缓存。也就是说,排序算法只需要为每个元素获取一次密钥,然后比较密钥。它不需要为每次比较都获取一个新键