Python根据类中属性自定义排序的方法
2022/9/1 1:22:54
本文主要是介绍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根据类中属性自定义排序的方法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-28Python编程基础教程
- 2024-12-27Python编程入门指南
- 2024-12-27Python编程基础
- 2024-12-27Python编程基础教程
- 2024-12-27Python编程基础指南
- 2024-12-24Python编程入门指南
- 2024-12-24Python编程基础入门
- 2024-12-24Python编程基础:变量与数据类型
- 2024-12-23使用python部署一个usdt合约,部署自己的usdt稳定币
- 2024-12-20Python编程入门指南