有的时候排序的元素类似于对象类型,这个时候就不能直接使用lambda表达式直接排序,因为我们需要使用两个元素的属性设置排序规则,使用lambda表达式无法直接访问属性,这个时候可以借助python标准库中funtools模块,这样可以自定义排序的规则比较方便(排序的时候传入比较函数)。比较常见的是列表中的元素为元组或者列表类型,python中列表中的元素为元组或者列表类型相当于c/c++中的结构体数组或者是java中的对象数组,下面是对列表中的元素为元组类型设置自定义排序规则,代码如下:
import functools
#x, y表示列表中的两个元素, 当列表中的元素为元组/列表类型的时候使用下标来访问对应的属性值, 排序的时候使用到了两个元素中的属性
def comp(x, y):
return x[0] * y[1] - x[1] * y[0]
if __name__ == "__main__":
# a中的每一个元组, 元祖中元素相当于c++结构体中的一个属性
a = [(2, 8, 4), (1, 2, 4), (1, 1, 3)]
a.sort(key=functools.cmp_to_key(comp))
print(a)