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

目录

核心代码

一个练习题


核心代码

方法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")

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

桂亭亭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值