Python3排序:删除自定义比较器以支持键-为什么?

在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函数

相反,对象可以被缓存。也就是说,排序算法只需要为每个元素获取一次密钥,然后比较密钥。它不需要为每次比较都获取一个新键

发表评论