1) 输入help(sorted)可以得到下面类容:
----------------------------------------------------------------------------------
sorted(...)
sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list
-----------------------------------------------------------------------------------
sorted 可以对任意一个可迭代序列进行排序。如下:
print sorted([1,2,-9,3,5,4]) # [-9, 1, 2, 3, 4, 5] print sorted({1:4,89:3,-9:4,10:2}) # [-9, 1, 10, 89]
sorted对对迭代序列排序后,返回排序后的列表,原序列不变。而像列表等自带的sort()方法则是在原地进行排序。
2)key参数
list.sort()和sorted()函数增加了key参数来指定一个函数,此函数将在每个元素比较前被调用.一般可使用lambda表达式,看下面例子:
# 用key指定排序忽略大小写 s = ['asrt','Afjg','bdfk','Ckfdh'] print sorted(s) # ['Afjg', 'Ckfdh', 'asrt', 'bdfk'] print sorted(s,key = lambda element: element.lower()) # ['Afjg', 'asrt', 'bdfk', 'Ckfdh']
key参数的值为一个函数,此函数只有一个参数且返回一个值用来进行比较。这个技术是快速的因为key指定的函数将准确地对每个元素调用。如下对复杂对象排序:
s = [('Hailey',23,175),('Lily',22,180),('Mike',19,170)] print sorted(s) # [('Hailey', 23, 175), ('Lily', 22, 180), ('Mike', 19, 170)] print sorted(s,key = lambda element:element[1]) # [('Mike', 19, 170), ('Lily', 22, 180), ('Hailey', 23, 175)]
对于多元对象,sorted是默认根据第一个元素进行排序的。上面用key指定的用哪个元素排序。这种方法也可以用于类:
class Student(object): def __init__(self,name, age, weight): self.age = age self.name = name self.weight = weight def __repr__(self): return repr((self.name,+self.age,self.weight)) instance = [Student('Lily',20,55),Student('Mike',21,78),Student('Aan',20,45)] # 默认按照第一个属性姓名排序 print sorted(instance) # [('Aan', 20, 45), ('Mike', 21, 78), ('Lily', 20, 55)] # 指定按照age来排序 print sorted(instance,key = lambda element:element.age) #[('Lily', 20, 55), ('Aan', 20, 45), ('Mike', 21, 78)] # 先按照 sge,再按照weight来排序 print sorted(instance,key = lambda element:(element.age,element.weight)) # [('Aan', 20, 45), ('Lily', 20, 55), ('Mike', 21, 78)]
3)cmp 参数
cmp参数和其他语言类似,cm效率没有key高,在puthon 3中已被移除
4) reverse 参数
reverse 参数默认为升序,当设置它为True时,即为降序。
l = [2,5,1,0,2,7,1] print sorted(l) # [0, 1, 1, 2, 2, 5, 7] print sorted(l,reverse = True) # [7, 5, 2, 2, 1, 1, 0]