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)
```
我的笔记