在 Python 2.4 中,您可以传递自定义比较器进行排序。
让我们来看看名单——
list=[5,1,2,3,6,0,7,1,4]
要先用偶数排序,然后再用赔率排序,我们可以执行以下操作 -
evenfirst=lambda x,y:1 if x%2>y%2 else -1 if y%2>x%2 else x-y
list.sort(cmp=evenfirst)
list == [0, 2, 4, 6, 1, 1, 3, 5, 7] # True
在 Python 3 中,您只能通过key
(Python 2.4 也支持)。
当然,在 Python 3 中也可以通过 right 实现相同的排序key
:
list.sort(key=lambda x:[x%2,x])
我对不再支持自定义比较器的决定感到好奇,尤其是当它似乎可以很容易地实现时。
是否在所有或大多数情况下,所需的排序顺序都有自然的key
?
例如,在上面的示例中,存在这样的键 - 实际上使用它的代码变得更加简洁。总是这样吗?
(我知道这种将比较器转换为键的方法,但理想情况下,如果可以将其内置到语言中,则不必采取这种变通方法。)