上一篇讲了list自带接口(方法)。
今天讲一下list的排序问题。
第一种方法:list自带的;第二种内置函数sorted();都借助于Key参数,key参数可以 利用lambda函数,也可以利用operator模块的itemgetter和attrgetter接口。
class Student:
def __init__(self, name, grade, age):
self.name = name
self.grade = grade
self.age = age
def __repr__(self):
return repr((self.name, self.grade, self.age))
student=[Student('zhang','A',18),Student('li','B',16),Student('wang','A',17)]
a=[123,110,98,34,1000] #实现按各位之和排序
#第一种方法:list自带的sort方法,有两个参数key和reverse=True/ False
def qiuhe(num):
b=0
for i in str(num):
b=b+int(i)
return b
a.sort(reverse=True,key=lambda num:qiuhe(num))
print(a)
#第二种方法是python自带的sorted()内置函数;使用方法和sort一样,不过是生成新列表,原列表不变,而且可以用于任何\
#可迭代的对象,而返回的都是一个列表。
a={123:1,110:1,98:1,34:1,1000:2}
b=[('a',12),('b',12),('b',13)]
new_a=sorted(a,reverse=True,key=lambda num:qiuhe(num))
print(new_a)
#第三种方法是使用模块operator中的itemgetter和attrgetter、methodcaller
import operator
b.sort(key=operator.itemgetter(1,0))
print(b)
#其实等同于lambda函数,不过这样更加优雅而已
b.sort(key=lambda n:(n[1],n[0]))
print(b)
student.sort(key=operator.attrgetter('age')) #attrgetter元素是类的实例时使用
print(student)