+ 我要发布
我发布的 我的标签 发现
浏览器扩展
斑点象@Edge

Python 如何自定义排序

Python 列表可以使用 data.sort() 或 sorted(data) 排序。 注意: 1,sort()函数会直接修改原有列表,永久改变,无法返回,函数返回为None 2,sorted()函数会返回一个排序后的列表,原有列表保持不变 3,sort() 效果高,如果改变原来的列表不影响逻辑,优先使用 sort() 一,单个属性排序 利用operator模块和sort()函数根据单个属性进行排序 ``` import operator class Student: def __init__(self, id, name, age): self.id = id self.name = name self.age = age students = [] for i in range(10): students.append(STU(i, "x", "xx")) #按学生年龄升序排序 students.sort(key=operator.attrgetter("age")) for stu in students: print(stu.id, stu.name, stu.age) #按学生年龄降序排序,在 sort 里添加 reverse=True 参数即可 students.sort(key=operator.attrgetter("age"), reverse=True) for stu in students: print(stu.id, stu.name, stu.age) ``` 二,单个属性排序 利用sorted()函数和lambda表达式根据单个属性进行排序 ``` class Student: def __init__(self, id, name, age): self.id = id self.name = name self.age = age students = [] for i in range(10): students.append(STU(i, "x", "xx")) #按学生年龄升序(如果要降序, sorted 添加第三个参数 reverse=True) new_list = sorted(students, key=lambda x: x.age) for stu in new_list: print(stu.id, stu.name, stu.age) ``` 三,多个属性排序 利用sorted()函数和lambda表达式根据多个属性进行排序 ``` class Student: def __init__(self, id, name, age): self.id = id self.name = name self.age = age students = [] for i in range(10): students.append(STU(i, "x", "xx")) #按年龄升序,若年龄相同则按ID升序 new_list = sorted(students, key=lambda x: (x.age, x.id)) for stu in new_list: print(stu.id, stu.name, stu.age) ```
我的笔记