本文主要是介绍Python根据类中属性自定义排序的方法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
如果以创建的对象作为列表中的元素,那么对列表进行排序时可使用sort()函数或sorted()函数,但要注意的是:
①当排序对象为列表的时候两者适合的场景不同
②sorted()函数会返回一个排序后的列表,原有列表保持不变
③sort()函数会直接修改原有列表,永久改变,无法返回,函数返回为None
④如果实际应用过程中需要保留原有列表,使用sorted()函数较为适合,否则可以选择sort()函数,因为sort()函数不需要复制原有列表,消耗的内存较少,效率也较高
1.利用operator模块和sort()函数根据单个属性进行排序
import operator
class STU:
def __init__(self, id, name, age):
self.id = id
self.name = name
self.age = age
ls = []
n = int(input()) # 输入学生人数
for i in range(n):
a, b, c = input().split() # 输入学号,姓名,年龄
ls.append(STU(a, b, c)) # 将当前学生信息加入列表中
ls.sort(key=operator.attrgetter("age")) # 对学生按照年龄属性升序排列,若相同则自动按照输入顺序
for each in ls:
print(each.id, each.name, each.age)
'''
测试数据
3
01 钱堃 20
03 魏文志 21
02 郭子 20
输出
01 钱堃 20
02 郭子 20
03 魏文志 21
'''
ls.sort(key=operator.attrgetter("age"), reverse=True) # 对学生按照年龄属性降序排列,若相同则自动按照输入顺序
for each in ls:
print(each.id, each.name, each.age)
'''
测试数据
3
01 钱堃 20
03 魏文志 21
02 郭子 20
输出
03 魏文志 21
01 钱堃 20
02 郭子 20
'''
2.利用sorted()函数和lambda表达式根据单个属性进行排序
class STU:
def __init__(self, id, name, age, score):
self.id = id
self.name = name
self.age = age
self.score = score
ls = []
n = int(input())
for i in range(n):
a, b, c, d = input().split()
ls.append(STU(a, b, int(c), int(d)))
ls = sorted(ls, key=lambda x: x.score) # 对学生按照成绩属性升序排列,若相同则自动按照输入顺序
for each in ls:
print(each.id, each.name, each.age, each.score)
'''
测试数据
3
01 钱堃 20 90
03 魏文志 21 59
02 郭子 20 100
输出
03 魏文志 21 59
01 钱堃 20 90
02 郭子 20 100
'''
ls = sorted(ls, key=lambda x: -x.score) # 对学生按照成绩属性降序排列,若相同则自动按照输入顺序
for each in ls:
print(each.id, each.name, each.age, each.score)
'''
测试数据
3
01 钱堃 20 90
03 魏文志 21 59
02 郭子 20 100
输出
02 郭子 20 100
01 钱堃 20 90
03 魏文志 21 59
'''
3.利用sorted()函数和lambda表达式根据多个属性进行排序
class STU:
def __init__(self, id, name, age, score):
self.id = id
self.name = name
self.age = age
self.score = score
ls = []
n = int(input())
for i in range(n):
a, b, c, d = input().split()
ls.append(STU(a, b, int(c), int(d)))
ls = sorted(ls, key=lambda x: (x.age, x.score)) # 按年龄升序,若年龄相同则按照分数升序
for each in ls:
print(each.id, each.name, each.age, each.score)
'''
测试数据
3
01 钱堃 20 90
03 魏文志 21 59
02 郭子 20 100
输出
01 钱堃 20 90
02 郭子 20 100
03 魏文志 21 59
'''
ls = sorted(ls, key=lambda x: (x.age, -x.score)) # 按年龄升序,若年龄相同则按照分数降序
for each in ls:
print(each.id, each.name, each.age, each.score)
'''
测试数据
3
01 钱堃 20 90
03 魏文志 21 59
02 郭子 20 100
输出
02 郭子 20 100
01 钱堃 20 90
03 魏文志 21 59
'''
这篇关于Python根据类中属性自定义排序的方法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!