class MyClass:
def __init__(self, value1, value2):
self.value1 = value1
self.value2 = value2
my_list = [MyClass(1, 2), MyClass(3, 4), MyClass(1, 3)]
def custom_sort_key(obj):
sum_value = obj.value1 ** 2 + obj.value2 ** 3
abs_value1 = abs(obj.value1)
return (-sum_value, abs_value1)
sorted_list = sorted(my_list, key=custom_sort_key)
for obj in sorted_list:
print(f"value1: {obj.value1}, value2: {obj.value2}")
代码解释
- 定义
MyClass
类:
- 首先定义了一个
MyClass
类,它有两个属性value1
和value2
,通过构造函数__init__
进行初始化。
- 创建实例列表:
- 创建了一个包含多个
MyClass
实例的列表my_list
。
- 定义排序规则函数:
- 定义了一个
custom_sort_key
函数,这个函数接收一个MyClass
实例作为参数。
- 在函数内部,计算
value1
的平方与value2
的立方之和sum_value
,同时获取value1
的绝对值abs_value1
。
- 返回一个元组
(-sum_value, abs_value1)
,之所以在sum_value
前加负号,是为了实现从大到小排序(因为sorted
默认是从小到大排序),对于abs_value1
则按从小到大排序。
- 使用
sorted
函数进行排序:
- 使用
sorted
函数对my_list
进行排序,key
参数指定为custom_sort_key
,这样就会按照我们定义的复杂规则进行排序。
- 输出结果:
- 最后通过循环遍历排序后的列表,输出每个实例的
value1
和value2
属性值。