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

关于降序代码问题?

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

课程里面说如果x 排在y前面,就返回-1;如果x排在y后面,就返回1;如果x==y,就返回0。这样就能实现降序。但是为什么这样就可以实现降序排序呢?x排在y前面,为什么不能返回1呢?很疑惑。。。

正在回答

2 回答

我觉得你理解错了,你应该要明白实现降序或者升序的函数是sorted函数,而不是你自定义的revered_cmp().

而sorted函数的作用是接受一个比较函数对序列进行排列,而这个比较函数会根据返回值是-1,就会把 x 排在 y 前面,返回值是1,就会把 x 排在 y 后面,返回值为0,就把两者并排。

所以你定义的reversed_cmp(),是作为sorted()的一个参数实现降序功能,因为sorted()默认的参数为cmp,只能进行升序排列,当然题目只是为了锻炼我们自定义排序函数,实际上sorted()还有一个参数reverse,表示排序规则,reverse = True 降序 , reverse = False 升序(默认),可以方便的实现降序排列。

你可以看看http://www.runoob.com/python/python-func-sorted.html,加深理解。


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

T松子 提问者

谢谢谢谢,是不是这样理解的: 比较函数的定义是,传入两个待比较的元素x和y,如果x应该排在y的前面,返回-1;如果x应该排在y的后面,返回1;如果x==y,返回0。revered_cmp是sorted()的一个参数,如果这个参数是-1,就会把x放在y前面(x > y);如果这个参数是1(x < y),x就会放在y后面;如果这个参数是0,表示这两个数相等,从而实现降序。而默认的cmp()和revered_cmp()正好相反,如果这个参数是-1,也会把x放在y前面(但是x < y);如果这个参数是1,也会把x放在y后面(但是x > y);如果这个参数是0,表示这两个数相等,从而实现了升序。
2019-01-24 回复 有任何疑惑可以回复我~
#2

T松子 提问者

所以cmp()函数是不是这样的: def cmp(x, y): if x < y: return -1 if x > y: return 1 return 0
2019-01-24 回复 有任何疑惑可以回复我~
#3

慕容7012403 回复 T松子 提问者

对对对,你的理解完全就是我想表达的意思了!
2019-01-24 回复 有任何疑惑可以回复我~
#4

慕容7012403 回复 T松子 提问者

cmp()就是这个意思啦,而且python还内置cmp()这个函数呢,看这里http://www.runoob.com/python/func-number-cmp.html,跟你定义的完全一样哦。
2019-01-24 回复 有任何疑惑可以回复我~
#5

T松子 提问者 回复 慕容7012403

非常感谢,终于理解啦,手动抱拳感谢
2019-01-24 回复 有任何疑惑可以回复我~
查看2条回复

可以进一步理解为两个参数作差,前面的减去后面的,如果是正数,说明前面的大,就返回1,就不改变顺序(前面的依然在前面,后面的依然在后面),反之,就改变以下顺序。如果等于0,就无所谓。

现在经过对第一个和第二个数字进行比较,把实数集分成5部分。比小的还小,等于小的,介于大小之间,等于大的,比大的还大。


接下来再拿第三个数来跟前两个数字来比,比较后放到正确的位置,然后再拿第四个数来跟前三个数来比较,放到正确的位置,依次类推……


以上全是我个人的理解和猜测,我觉得比较容易理解,如果有懂底层原理的大神,欢迎来指正。

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

举报

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

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

进入课程

关于降序代码问题?

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