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

这里为何self.score > s.score ,return值为-1,若为1,则score值大的却排在后面

class Student(object):

    def __init__(self, name, score):
        self.name = name
        self.score = score

    def __str__(self):
        return '(%s: %s)' % (self.name, self.score)

    __repr__ = __str__

    def __cmp__(self, s):
        if self.score > s.score:
            return -1
        elif self.score < s.score:
            return 1
        elif self.score == s.score:
            if self.name > s.name:
                return 1
            else:
                return -1
        return 0

L = [Student('Tim', 99), Student('Bob', 88), Student('Alice', 99)]
print sorted(L)

正在回答

1 回答

你去看看sorted()函数就明白了。 (进入python命令后,输:help(sorted))

例:list = [x,y,z]

sorted(list) 中的默认排序函数根据:list中数值类型自带的cmp()返回的值。

而sorted默认排序是从从小到大。cmp(x,y)若返回-1,sorted就认为x<y,将x排在y之前。

同理,cmp(x,y) 若返回0,则认为x==y, 若返回1 ,则认为 x>y,将y排在x之后。

最终sorted根据cmp 将list排序好。

而本题相反,高分排在前面,所以:

def __cmp__(self,s):

        if self.score>s.core:

                return -1

        ............

也可以简单写: return -cmp(self.score,s.score)

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

Dr_苏泊 提问者

非常感谢!
2015-07-22 回复 有任何疑惑可以回复我~

举报

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

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

进入课程

这里为何self.score > s.score ,return值为-1,若为1,则score值大的却排在后面

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