Py根据对象的某个属性排序,比大小

news2024/11/25 14:21:20

目录

核心代码

一个练习题


核心代码

方法1

不对原来的list进行改变

m = sorted(需要排序的list集合, key=lambda x: x.对象的属性名)

括号中加上reverse=True表示反转顺序,你默认的顺序是从小到大加上之后变成从大到小OK

方法2

对原来的list进行排序

cmp = operator.attrgetter(需要排序的对象的属性名)
listS.sort(key=cmp)

括号中加上reverse=True表示反转顺序,你默认的顺序是从小到大加上之后变成从大到小OK

一个练习题

题目如下 

        对于处理这类题目如果使用的是py,那就开心了,因为有大量的API可供我们调用!!!比如此题我们要处理Excel表格所以我们要使用1个包 xlrd!

        因为这些数据并不是独立的数据而像是一个对象所以我们就新建一个实体类用于包装这些数据!所以我们就搞了一个实体类, Py的实体类由三部分构成第1个类名,第2个构造函数,第3个属性及方法,我们依次对他完成书写即可

         OK实体类写完了我们就可以往实体类里面放数据了我们对Excel进行读取一次读取一行所以从一开始这样就不会读到其余的脏数据了,我们将读取一行存入一个列表中,并传入我们的实体类让实体类的构造函数,对其中的数据进行提取并完成数值初始化的操作。

        初始化完成之后就是对数据的处理了,提议所说我们要提取出成绩最高的前三名同学的名字!所以我们需要对这些对象进行一个排序,这就用到了我们的排序函数了,及本文的主题如何利用排序函数对复杂对象进行排序。

        代码如下

student.py实体类

class Student:
    score=0
    def __init__(self, k):
        self.__name = k[0]
        self.__k1 = k[1]
        self.__k2 = k[2]
        self.__k3 = k[3]
        self.score=k[1]+k[2]+k[3]

    def getName(self):
        return self.__name

处理类

import xlrd
from com.xwj.excel.student import Student


def rederExcel(path):
    df = xlrd.open_workbook(path)
    table = df.sheets()[0]
    listS = []
    for i in range(1, table.nrows):
        x = Student(table.row_values(i))
        listS.append(x)
    m = sorted(listS, key=lambda x: x.score, reverse=True)
    for y in range(len(m) - 1):
        print(m[y].getName(), m[y].score)


if __name__ == '__main__':
    rederExcel("student.xlsx")

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/92837.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

javaSE -面向对象编程(包,继承,组合,多态,抽象类,接口)

一、包(package) 1.1、包(package)是组织类的一种方式 包里存的基本上都是类,而这些类都是别人写好的。我们只需要拿着用。前提是导入对应的包 比如说:打印数组 import java.util.Arrays; public class T…

鲜花店如何数字化转型,鲜花店管理小程序

鲜花的用途非常广泛,除了平时祝福送亲友外,还有七夕/情人节送情侣/爱人等,商圈中的各品牌花店也都不少,并且其收益也相当可观,虽然是非必需品,但却又不可缺。 雨科网观察了鲜花行业相关数据报告后&#xff…

基于java+springmvc+mybatis+vue+mysql的学生竞赛模拟系统

项目介绍 本系统采用java语言开发,后端采用springboot框架,前端采用vue技术,数据库采用mysql进行数据存储。 前台: 首页、公交信息、论坛交流、试卷、校园资讯、个人中心、后台管理 后台: 首页、个人中心、用户管理…

别再随意说 Redis 的 SET 保障原子性,在客户端不一定

分布式系统有一个特点,就是无论你学习积累多少知识点,只要在分布式的战线中,总能遇到各种超出主观意识的神奇问题。比如前文使用Jedis来实现分布式锁的技术知识点储备,本以为很稳不会再遇到什么问题,但实际情况却是啪啪…

Android ASM

文章目录逆波兰表达式与字节码的关系中缀表达式转换为逆波兰表达式(后缀表达式)的过程逆波兰表达式求值过程ASM 的使用ASM 常用 api 说明ClassWriter构造函数传参 flags 的作用定义类的属性:visit()定义类的方法:visitMethod()定义…

原生小程序canvas生成图片、保存到本地

今天在视频中看到一个跳动的小球的效果,感觉挺好玩的。于是自己也实现了一个,感觉还是好玩,就想来分享一番;小伙伴们可以来看一下。这次主要为大家玩一下radial-gradient和动画阴影的调试。 效果呈上 代码来了 大家可以先仔细阅…

Docker安装(图文教程)

一、Docker简介 1、Docker是什么 (1)Docker是一种虚拟化容器技术。Docker基于镜像,可以秒级启动各种容器。每一种容器都是一个完整的运行环境,容器之间互相隔离。(2)在Docker的官方,提供了很多容…

Java培训之Nginx启动

1. Nginx启动 启动问题 进入/usr/local/nginx/sbin目录,运行命令./nginx 即可启动nginx nginx无法启动: libpcre.so.1/libpcre.so.0: cannot open shared object file解决办法 Java培训之Nginx启动 解决方法: ln -s /usr/local/lib/libpcre.so.1 /l…

web前端网页设计期末课程大作业:HTML旅游网页主题网站设计——酒店主题网站设计—酒店阳光温馨网站(5页)HTML+CSS+JavaScript

👨‍🎓学生HTML静态网页基础水平制作👩‍🎓,页面排版干净简洁。使用HTMLCSS页面布局设计,web大学生网页设计作业源码,这是一个不错的旅游网页制作,画面精明,排版整洁,内容…

[附源码]Nodejs计算机毕业设计基于的汉服服装租赁系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置: Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分…

32-Vue之ECharts-雷达图

ECharts-雷达图前言雷达图特点雷达图的基本实现雷达图的常见效果显示数值区域面积绘制类型完整代码前言 本篇来学习写雷达图 雷达图特点 可以用来分析多个维度的数据与标准数据的对比情况 雷达图的基本实现 ECharts 最基本的代码结构定义各个维度的最大值准备具体产品的数…

Python编程|手把手教植物大战僵尸,代码开源

前言 如题,手把手教Python实现植物大战僵尸游戏,代码简单易学,无需额外安装Python包,只要有pygame即可,文末获取全部素材及源代码~ 视频演示效果:https://www.bilibili.com/video/BV1cG411u755/?spm_id_…

并发编程之深入理解ReentrantLock和AQS原理

AQS(AbstractQueuedSynchronizer)在并发编程中占有很重要的地位,可能很多人在平时的开发中并没有看到过它的身影,但是当我们有看过concurrent包一些JDK并发编程的源码的时候,就会发现很多地方都使用了AQS,今…

(文章复现)6计及源荷不确定性的电力系统优化调度(MATLAB程序)

目录 参考文章: 代码主要内容: 主程序: 结果图: 参考文章: 考虑源荷两侧不确定性的含风电电力系统低碳调度——崔杨(2020) 代码主要内容: 参照考虑源荷两侧不确定性的含风电的…

JAVA基础讲义06-面向对象

面向对象一、编程思想什么是编程思想面向过程和面向对象面向过程编程思想面向过程思想面向过程实现应用场景面向过程特点面向过程代表语言面向对象介绍面向对象编程思想面向对象的三大特征面向对象思想总结什么是编程面向对象分析方法分析问题的思路和步骤二、类和对象类类的概…

它破解了AI作画的中文语料难题,AIGC模型讲解(以世界杯足球为例)

目录1 扩散模型与AI绘画2 中文语料的挑战3 昆仑天工:AIGC新思路3.1 主要特色3.2 模型蒸馏3.3 编解码与GPT3.4 stable-diffusion3.5 性能指标4 体验中文AI绘画模型5 展望1 扩散模型与AI绘画 AI绘画发展历史始于20世纪60年代,当时人工智能研究者们尝试使用…

springboot启动流程源码分析

一、引入思考的问题 1、springboot未出现之前,我们在在spring项目中如果要使用数据源(比如我们使用druid),需要做哪些事情呢? (1)引入druid的jar包 (2)配置数据源的参…

微服务调用工具

微服务调用工具目录概述需求:设计思路实现思路分析1.A2.B3.C参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,make a better result,wait for change,challenge Survive…

Postman API测试工具 - 初认知 基本使用(一)

Postman - API测试工具 初认知(一) 文章目录Postman - API测试工具 初认知(一)一、什么是Postman?二、如何下载Postman?三、Postman的使用四、处理GET请求:五、处理POST请求总结一、什么是Postm…

Python 缩进语法的起源:上世纪 60-70 年代的大胆创意

上个月,Python 之父 Guido van Rossum 在推特上转发了一篇文章《The Origins of Python》,引起了我的强烈兴趣。 众所周知,Guido 在 1989 年圣诞节期间开始创造 Python,当时他就职于荷兰数学和计算机科学研究学会(简称…