天天看點

Python對清單中的清單進行排序

之前寫過一個對清單中的字典進行排序的文章,之是以又寫是因為我确實遇到了這樣的題目,如果要求資料按照一定的格式存儲但是又不允許使用字典那該怎麼辦?下面是我的作業題:将學生資訊存入但是要用清單存儲,相應的清單的每一個位置對應的值是相同的,如下 位置0 是學号,位置1 是姓名,位置 位置2 是年齡 ,位置3是性别,位置4 是成績。其實對清單中的清單進行排序就和清單中的字典排序一樣:

如上,也是利用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()