为了账号安全,请及时绑定邮箱和手机立即绑定

python3.5版本自定义排序函数问题请教!Mayday!!!!!

由于python3.5中自定义排序函数sorted中cmp被取消了,只能用key作单个参数的传入;在进阶课程中2-7里我想实现两个参数的比较,并传入sorted里怎么传,可否举个例子!看python的 library文档说利用"functools.cmp_to_key(func)",但是找遍各种网站也没有个例子。So,希望得以解救。ps:尝试过各种想法,但还是报错,调试不出结果。

正在回答

3 回答

>>> import functools
>>> def reversed_cmp(x, y):
    if x > y:
        return -1
    if x < y:
        return 1
    return 0

>>> sorted([36, 5, 12, 9, 21], key=functools.cmp_to_key(reversed_cmp))
[36, 21, 12, 9, 5]

我在3.5环境下,sorted里面key=functools.cmp_to_key(reversed_cmp) 才可以通过

0 回复 有任何疑惑可以回复我~

这样写,先导入functools模块,然后利用key=cmp_to_key(func)来写代码

>>> import functools
>>> def reversed_cmp(x, y):
    if x > y:
        return -1
    if x < y:
        return 1
    return 0

>>> sorted([36, 5, 12, 9, 21], key=cmp_to_key(reversed_cmp))
[36, 21, 12, 9, 5]

1 回复 有任何疑惑可以回复我~

简易的对比函数,自己编写呗:

倒序排序:

def reversed_cmp(x, y):
   if x > y:
       return -1
   if x < y:
       return 1
   return 0

或者

顺序排序:

def reversed_cmp(x, y):
   if x > y:
       return 1
   if x < y:
       return -1
   return 0

0 回复 有任何疑惑可以回复我~
#1

qq_1_95

调用 sorted() 并传入 reversed_cmp 就可以实现倒序排序/顺序排序咯~
2016-12-12 回复 有任何疑惑可以回复我~
#2

ETHAN5 提问者

请看清楚问题!!
2016-12-12 回复 有任何疑惑可以回复我~
#3

qq_1_95 回复 ETHAN5 提问者

哦哦,我刚刚开始学,脑回路比较简单,填坑坐等大神解答~
2016-12-13 回复 有任何疑惑可以回复我~
#4

ETHAN5 提问者 回复 qq_1_95

因为课程例子提供是2.7版本的,可以运行。但我装的是3.5版;里面把sorted函数中的cmp关键参数去除了,只能用key传入单个变量的函数;而例子举的是x,y两个变量比较的函数,传不进去。调试过程中报:丢失一个变量'y'。所以看文档说可以使用functools.cmp_to_key作与2.7版本相同的功能。想找这个用法的例子。so…答非所问
2016-12-13 回复 有任何疑惑可以回复我~
查看1条回复

举报

0/150
提交
取消
python进阶
  • 参与学习       255665    人
  • 解答问题       2949    个

学习函数式、模块和面向对象编程,掌握Python高级程序设计

进入课程

python3.5版本自定义排序函数问题请教!Mayday!!!!!

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信