effective python读书笔记——sort的key参数
#讨论排序:
class Tool:
def __init__(self,name,weight):
self.name=name
self.weight=weight
def __repr__(self):
return f'({self.name} {self.weight})'
tools=[Tool('drill',4),Tool("circular",5),Tool('jack',40),Tool('Sander',4)]
#print(tools.sort())
#由类的对象构成的列表是没法用sort进行排序的,Tool中没有定义的排序方法
print('原始:')
print(tools)
tools.sort(key=lambda x:x.name.lower())#lower避免首大写字母的影响
print("依照name排序:")
print(tools)
#利用元组比较大小的特性,即先比较首个元素,相同再比较第二个元素,以此类推
tools.sort(key=lambda x:(x.weight,x.name.lower()),reverse=True)#均逆序
print("先依照weight排序,weight相同再依照name排序:")
print(tools)
#这样的缺点是要么都升序,要么都降序
#如果有其中一项指标是数字,可以填个负号取个巧
tools.sort(key=lambda x:(-x.weight,x.name.lower()))
print("数字优先逆序,字母正序:")
print(tools)
#实在不行,可以拆成两次来实现
print("数字优先,正序,其次字母逆序")
tools.sort(key=lambda x:x.name.lower(),reverse=True)
print(tools)
#首要指标放后面
tools.sort(key=lambda x:x.weight)
print(tools)
