Python 中的排序

来源:互联网 发布:finale mac 编辑:程序博客网 时间:2024/05/16 00:46

早在学习perl的时候就总结过排序问题 Schwartzian Transform(施瓦茨变换)

现在,我们来看看在python中如何实现:
Schwartzian transform的中心思想就是Decorate-Sort-Undecorate

class Student:    def __init__(self, name, grade, age):        self.name = name        self.grade = grade        self.age = age    def __repr__(self):        return repr((self.name, self.grade, self.age))s1 = Student('Ace', 'S', 12)s2 = Student('David', 'A', 10)s3 = Student('Jie', 'S', 13)s4 = Student('Shawn', 'A', 11)students = [ s1, s2, s3, s4 ]decorated = [(s.grade, s.age, s) for s in students]decorated.sort()#undecoratesorted_students = [ s for _,_,s in decorated ]print sorted_students# [('David', 'A', 10), ('Shawn', 'A', 11), ('Jie', 'S', 12), ('Ace', 'S', 13)]

当然,既然用了python,就应该pythonic到底,试试下面的方法吧:

print sorted(students, key=lambda s: s.grade and s.age)
from operator import attrgetterprint sorted(students, key=attrgetter('grade', 'age'))
0 0
原创粉丝点击