ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python根据类中属性自定义排序的方法

2022-08-31 21:00:24  阅读:250  来源: 互联网

标签:20 name 自定义 Python age ls each id 类中


如果以创建的对象作为列表中的元素,那么对列表进行排序时可使用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
'''

标签:20,name,自定义,Python,age,ls,each,id,类中
来源: https://www.cnblogs.com/Fare-well/p/16644476.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有