2025-09-10:仓库迁移
This commit is contained in:
32
1.数据结构与算法/14.原生不支持比较操作的对象排序.py
Normal file
32
1.数据结构与算法/14.原生不支持比较操作的对象排序.py
Normal file
@@ -0,0 +1,32 @@
|
||||
# 众所周知,对class这种原生不支持比较的对象直接进行比较会造成暴毙;
|
||||
# 我们但如果非比不可呢?比如这个东西:
|
||||
class User:
|
||||
def __init__(self,user_id):
|
||||
self.user_id = user_id
|
||||
|
||||
def __repr__(self):
|
||||
return "User({})".format(self.user_id)
|
||||
|
||||
# 这里有一个列表user
|
||||
user = [User(23), User(3), User(99)]
|
||||
|
||||
# 如果这时候需要按照某个属性给这个列表排序,那么直接sorted会报错:
|
||||
try:
|
||||
sorted(user)
|
||||
pass
|
||||
except:
|
||||
print("你看吧,报错了")
|
||||
|
||||
# 这里的原因是对象不能直接进行比较,所以想要排序只能按照对象里的某个属性
|
||||
# 有两种解决方案:
|
||||
sorted_list = sorted(user, key=lambda x: x.user_id)
|
||||
print(sorted_list)
|
||||
|
||||
# 要么就用operator库里的attrgetter
|
||||
from operator import attrgetter
|
||||
sorted_list = sorted(user, key=attrgetter("user_id"))
|
||||
print(sorted_list)
|
||||
|
||||
# 用这东西的好处和针对字典的itemgetter一样,可以取多个字段
|
||||
# sorted_list = sorted(user, key=attrgetter("user_id", "word_2", "word_3", ...))
|
||||
# 同样的,max和min这种有key参数的内建函数都能用这些东西折腾
|
Reference in New Issue
Block a user