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]