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

关于sorted(函数正序和倒序的区别

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

   return 0

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


def reversed_cmp(x, y):

    if x < y:

        return -1

    if x > y:

        return 1

    return 0

print sorted([36, 5, 12, 9, 21], reversed_cmp)

[5, 9, 12, 21, 36]


根据这两个例子是怎么看出来  正序和倒序的区别哎

正在回答

2 回答

默认cmp(x,y) 函数用于比较2个对象,如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1,即:

 if x < y:

        return -1

    if x > y:

        return 1

    return 0

此时 sorted([36, 5, 12, 9, 21]),结果是[5, 9, 12, 21, 36]

反之,相当于-cmp,结果是反过来的


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

慕沐4974640 提问者

非常感谢!
2017-04-16 回复 有任何疑惑可以回复我~

这个跟java中比较排序是一样的,没记错的话应该叫compareTo();如果不熟悉java,可以这样理解,其实是正序还是倒序,主要要看定义的reversed_cmp(x, y)函数中是怎么比较的,sorted([36, 5, 12, 9, 21], reversed_cmp)这个函数你可以理解为它对list中的元素进行排序,就拿你的第一个reversed_cmp(x, y)来说,对[36, 5, 12, 9, 21]排序时,都会分别两两比较这个list中的元素,每次比较时,都会看reversed_cmp(x, y)的返回结果,如果x>y,reversed_cmp(x, y)会返回-1,则不会交换位置,如果返回1,则交换位置,这样就对[36, 5, 12, 9, 21]进行了从大到小的降序排列。同理,你的第二个reversed_cmp(x, y)也是一样,返回-1,不交换位置,返回1,则交换位置

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

举报

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

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

进入课程

关于sorted(函数正序和倒序的区别

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