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

在 python3 中运行出错

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 cmp(self.name, s.name)
        return -cmp(self.score, s.score)
        
            

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

# 下面是错误
TypeError: '<' not supported between instances of 'Student' and 'Student'


正在回答

1 回答

在Python 3.x, 取消了 cmp 参数, 只保留了Key Function参数。正确代码如下:

L = [Student('Tim', 99), Student('Bob', 88), Student('Alice', 99)]
print (sorted(L, key=lambda student:(student.score,student.name)))#优先按照score,其次按照name排序。

In Py3.0, the cmp parameter was removed entirely (as part of a larger effort to simplify and unify the language, eliminating the conflict between rich comparisons and the __cmp__() magic method).

https://docs.python.org/3/howto/sorting.html

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

小白学编程666 提问者

非常感谢!
2018-01-11 回复 有任何疑惑可以回复我~
#2

哈哈哈哈哈啊哈

请问这样的话,都是按照从小到大排序的,如果加上reverse=True,就又都是从大到小了,那怎么能score从大到小,名字从小到大
2018-03-03 回复 有任何疑惑可以回复我~
#3

你们不要学了我跟不上了 回复 哈哈哈哈哈啊哈

print (sorted(L, key=lambda student:(-student.score,+student.name))) -号代表降序,+号代表升序
2018-08-21 回复 有任何疑惑可以回复我~
#4

你们不要学了我跟不上了 回复 你们不要学了我跟不上了

额。。没有+号。。记错了
2018-08-21 回复 有任何疑惑可以回复我~
查看1条回复

举报

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

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

进入课程

在 python3 中运行出错

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