python中的快速排序(sort/sorted/operator/cmp)

1、sort
只是python中列表的内置方法,只对列表适用
注意:会改变原有的列表,不会生成新列表

a = [5, 4, 2, 3, 1, 8, 9]
a.sort()
print(a)-->>[1, 2, 3, 4, 5, 8, 9]
#sort的参数有key和reverse,key用的不多,reverse默认是False升序排序
#如果是降序reverse=True

2、sorted
sorted()是python内置的方法,和sort的区别是对所有的可迭代的序列都可进行排序,并且不会改变原有的列表或者元组等可迭代对象,生成一个新的对象。

a = [5, 4, 2, 3, 1, 8, 9]
print(sorted(a))-->[1, 2, 3, 4, 5, 8, 9]

对sorted里的参数key用法举例
b = [{"name": "Alice", "age": 18}, {"name": "Tom", "age": 20}]
print(sorted(b, key=lambda x : x['age']))
-->[{'name': 'Alice', 'age': 18}, {'name': 'Tom', 'age': 20}]

c = [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
print(sorted(c, key=lambda x : x[2]))
-->[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

#sorted的参数也有key和reverse,reverse默认是False升序排序
#如果是降序reverse=True

3、operator
operator是python的一个模块,为python提供了一些标准化的接口,可以替代一些lambda函数
经常用的两个函数:itemgetter()和attrgetter()

itemgetter()函数使用举例:
返回一个可调用对象,通过调用__getitem__方法,传入下标,获取数据。如果传入多个下标,获取数据元组,可以替代lambda函数

c = [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
print(sorted(c, key=itemgetter(2)))-->[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
attrgetter()函数使用举例:
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_objects = [
	Student('john', 'A', 15),
	Student('jane', 'B', 12),
	Student('dave', 'B', 10)]

print(sorted(student_objects, key=attrgetter('age') )-->
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

4、cmp参数
python2有的,python3删除了这个参数, 该方法只在python2中
在2.x中,sort允许一个可选的函数,可以进行比较compare。 该功能应该采取要比较两个参数,然后返回的负值代表小于;返回零,代表相等;正值代表大于。

def numeric_compare(x, y):
	return x - y
print(sorted([5, 2, 4, 1, 3], cmp=numeric_compare))-->
[1, 2, 3, 4, 5]
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值