effective python讀書(shū)筆記——sort的key參數(shù)
#討論排序:
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())
#由類(lèi)的對(duì)象構(gòu)成的列表是沒(méi)法用sort進(jìn)行排序的,Tool中沒(méi)有定義的排序方法
print('原始:')
print(tools)
tools.sort(key=lambda x:x.name.lower())#lower避免首大寫(xiě)字母的影響
print("依照name排序:")
print(tools)
#利用元組比較大小的特性,即先比較首個(gè)元素,相同再比較第二個(gè)元素,以此類(lèi)推
tools.sort(key=lambda x:(x.weight,x.name.lower()),reverse=True)#均逆序
print("先依照weight排序,weight相同再依照name排序:")
print(tools)
#這樣的缺點(diǎn)是要么都升序,要么都降序
#如果有其中一項(xiàng)指標(biāo)是數(shù)字,可以填個(gè)負(fù)號(hào)取個(gè)巧
tools.sort(key=lambda x:(-x.weight,x.name.lower()))
print("數(shù)字優(yōu)先逆序,字母正序:")
print(tools)
#實(shí)在不行,可以拆成兩次來(lái)實(shí)現(xiàn)
print("數(shù)字優(yōu)先,正序,其次字母逆序")
tools.sort(key=lambda x:x.name.lower(),reverse=True)
print(tools)
#首要指標(biāo)放后面
tools.sort(key=lambda x:x.weight)
print(tools)
