如何解决:“如果list不仅仅包含 Student 类,则 __cmp__ 可能会报错”
print sorted(L)
2015-04-05
当含有其他类是,可以判断其他类的类型。例如有数字和字符串,数字和分数比较,字符串和名字比较
def __cmp__(self, s):
if isinstance(s,Student):
if self.score<s.score:
return -1
elif self.score>s.score:
return 1
else:
if self.name<s.name:
return -1
elif self.name>s.name:
return 1
else:
return 0
elif isinstance(s,str):
if self.name<s:
return -1
elif self.name>s:
return 1
else:
return 0
elif isinstance(s,int):
if self.score<s:
return -1
elif self.score>s:
return 1
else:
return 0
这样写有点复杂,不如重写一个cmp方法,重复调用
当然也可以按照其他同学的方法:同类的话进行比较,不同类的话顺序不变。但是此方法有问题:如果是中间夹带,那么只比较前后顺序使得最后结果不对。
Ex:L = [Student('Tim', 99), Student('Bob', 88), Student('Alice', 99),100,'Hello',Student('im', 99)] 最后结果为只排序了前半段。
[(Bob: 88), (Alice: 99), (Tim: 99), 100, 'Hello', (im: 99)]
举报