python 中的 sorted

 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]

 

转载于:https://www.cnblogs.com/td15980891505/p/5979768.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值