Python算法详解
上QQ阅读APP看书,第一时间看更新

2.1.4 排序类定义的实例

在Python程序中,我们可以排序一个类定义的多个实例。使用内置函数sorted()可以接收一个用来传递可调用(callable)对象的参数key,而这个可调用对象会返回待排序对象中的某些值,sorted()函数则利用这些值来比较对象。假设在程序中存在多个User对象的实例,如果想通过属性user_id来对这些实例进行排序,可以提供一个可调用对象,它将User实例作为输入,然后返回user_id。下面的实例文件leishili.py演示了排序上述User对象实例的过程。

源码路径:daima\第2章\leishili.py

class User:
     def __init__(self, user_id):
          self.user_id = user_id
    def __repr__(self):
          return 'User({})'.format(self.user_id)
# 原来的顺序
users = [User(19), User(17), User(18)]
print(users)
# 根据user_id排序
①print(sorted(users, key=lambda u: u.user_id))
from operator import attrgetter
②print(sorted(users, key=attrgetter('user_id')))

在上述代码中,在①处使用lambda表达式进行了处理,在②处使用内置函数operator.attrgetter()进行了处理。执行结果如图2-7所示。

图2-7 执行结果