首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python 3排序:删除自定义比较器,转而使用key -为什么?

Python 3排序:删除自定义比较器,转而使用key -为什么?
EN

Stack Overflow用户
提问于 2013-09-04 22:48:23
回答 2查看 1.2K关注 0票数 17

在Python2.4中,您可以传递一个自定义比较器来排序。

让我们看看这张清单-

代码语言:javascript
复制
list=[5,1,2,3,6,0,7,1,4]

为了首先对偶数进行排序,然后进行赔率排序,我们可以执行以下操作:

代码语言:javascript
复制
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

在Python3中,您只能传递key (在Python2.4中也支持)。

当然,在Python3中使用正确的key也可以实现相同的排序

代码语言:javascript
复制
list.sort(key=lambda x:[x%2,x])

我对不再支持自定义比较器的决定感到好奇,特别是当它看起来可以很容易地实现的时候。

在所有或大多数情况下,所需的排序顺序是否具有自然的key

例如,在上面的示例中,存在这样一个键-实际上,使用它代码变得更加简洁。一直都是这样吗?

(我知道这个用于将比较器转换为键的recipe,但理想情况下,如果它可以内置到语言中,就不应该采取这样的变通方法。)

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18617014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档