首页 > 编程语言 >Python根据类中属性自定义排序的方法

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

时间:2022-08-31 21:00:14浏览次数:49  
标签: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,类中
From: https://www.cnblogs.com/Fare-well/p/16644476.html

相关文章

  • Python中None作为索引的作用
    None的作用主要是在使用None的位置新增一个维度。a=np.arange(25).reshape(5,5)print(a)'''[[01234][56789][1011121314][1516171819]......
  • 合并k个有序列表-python
    主要思路:借鉴堆、队列特点,构建新的有序结果#mergetheksortedlist#mainidea:将每个list放入队列,初始一个小顶堆,size为list个数,value为队列的首个元素,交替寻找最......
  • python进阶__struct数据处理详解
    一、此模块可以执行Python值和以Pythonbytes对象表示的C结构之间的转换二、打包解包需要按照特定的方式来打包或者解包.该方式就是格式化字符串,它指定了数据类......
  • python怎么将json转成字符串
    在python中将json转成字符串的方法:首先打印出数据的类型;然后输入“str=json.dumps(data,indent=2)”命令将json转换为字符串,最后使用print语句打印出字符串即可。pyth......
  • Python入门系列(六)一篇学会python函数
    函数函数是只在调用时运行的代码块。defmy_function():print("Hellofromafunction")my_function()信息可以作为参数传递到函数中。defmy_function(fname):......
  • 这个Python读取文件的方法,堪称天花板级别...
    序言哈喽兄弟们,今天咱们来了解一下fileinput。说到fileinput,可能90%的码农表示没用过,甚至没有听说过。这不奇怪,因为在python界,既然open可以走天下,何必要filein......
  • Python自学笔记11-函数的定义和调用
    函数是组织代码的非常有效的方式,有了函数,我们就可以编写大规模的项目。可以说,函数是组织代码的最小单元。Python函数的定义函数是代码封装的一种手段,函数中包含一段可以......
  • Python爬虫-BeautifulSoup基本用法(三)
    BeautifulSoup基本用法BeautifulSoup是Python的一个HTML或XML的解析库,可以用它来方便地从网页提取数据(以下为崔庆才的爬虫书的学习笔记)一.安装方式#安装beautifulsoup......
  • python 修改列表元素
    修改列表的元素时,可以使用for循环结合range n=int(input())list_b=[[1,2,3],[4,5,6],[7,8,9]]foriinrange(len(list_b)):  foryinrange(len(l......
  • jenkins-配置python
    1.进入"Dashboard"界面,点击左侧"构建执行状态"2.点击列表设置图标3.勾选"Environmentvariables",点击"新增",输入环境变量【名称和python路径】,点击保存4.查看......