之前写过一个对列表中的字典进行排序的文章,之所以又写是因为我确实遇到了这样的题目,如果要求数据按照一定的格式存储但是又不允许使用字典那该怎么办?下面是我的作业题:将学生信息存入但是要用列表存储,相应的列表的每一个位置对应的值是相同的,如下 位置0 是学号,位置1 是姓名,位置 位置2 是年龄 ,位置3是性别,位置4 是成绩。其实对列表中的列表进行排序就和列表中的字典排序一样:
s = sorted(self.student_list,key=lambda st:st[4],reverse=True)
如上,也是利用sorted函数,通过修改Key来让sorted按指定位置的值进行排序,这里按照的是列表中列表的第五个取值。也就是成绩的大小进行排序的。如果觉得我说的太模糊可以看我的上一篇Python中对列表中的字典元素进行排序 此篇中还介绍了sort方法,两种方法各有异同,需要自行理解一下。
下面是我的整个代码,因为这个代码出现的此问题,一并贴出,方便大家清楚我数据的初始样子。也可以自行复制运行一下。
class Student(object):
def __init__(self,no,name,age,sex,grade):
self.no = no
self.name = name
self.age = age
self.sex = sex
self.grade = grade
class Grade(object):
def __init__(self, class_name, student_list=None):
if student_list is None:
student_list = []
self.class_name = class_name
self.student_list = student_list
def addStudent(self,stu):
slist = [stu.no,stu.name,stu.age,stu.sex,stu.grade]
self.student_list.append(slist)
def showall(self):
print('{}班的班级信息:\n'.format(self.class_name))
for i in self.student_list:
print("学号:{}\n姓名:{}\n年龄:{}\n性别:{}\n成绩:{}\n".format(i[0],i[1],i[2],i[3],i[4]))
def index_no(self,no):
print('学号{}是:'.format(no))
for i in self.student_list:
if no == i[0]:
print("姓名:{}\n年龄:{}\n性别:{}\n成绩:{}\n".format(i[1],i[2],i[3],i[4]))
def fail(self):
print('不及格的有:')
for i in self.student_list:
if i[4]<60:
print("学号:{}\n姓名:{}\n年龄:{}\n性别:{}\n成绩:{}\n".format(i[0],i[1],i[2],i[3],i[4]))
def grade_sort(self):
print('成绩由高到低:')
s = sorted(self.student_list,key=lambda st:st[4],reverse=True)
for i in s:
print("学号:{}\n姓名:{}\n年龄:{}\n性别:{}\n成绩:{}\n".format(i[0],i[1],i[2],i[3],i[4]))
s1 = Student('1','小伍',24,'男',100)
s2 = Student('2','小佳',24,'女',100)
s3 = Student('3','小李',24,'男',50)
s4 = Student('4','小张',24,'男',51)
s5 = Student('5','小六',24,'男',70)
s6 = Student('6','小三',24,'男',90)
s7 = Student('7','小四',24,'男',60)
G1 = Grade('359')
G1.addStudent(s1)
G1.addStudent(s2)
G1.addStudent(s3)
G1.addStudent(s4)
G1.addStudent(s5)
G1.addStudent(s6)
G1.addStudent(s7)
G1.index_no('1')
G1.fail()
G1.showall()
G1.grade_sort()