目录
核心代码
一个练习题
核心代码
方法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")