python中sort与sorted函数
Python对数组与字典提供了两种排序方法:
- List成员函数
sort()
在本地排序,不返回副本 - Build-in 函数
sorted()
返回副本,原始输入不变
在帮助中心下,两个函数的描述分别如下:
help(sorted)
Help on built-in function sorted in module builtin:
sorted(iterable, cmp=None, key=None, reverse=False) —> new sorted listhelp(list.sort)
Help on method_descriptor:
L.sort(cmp=None, key=None, reverse=False) — stable sort IN PLACE;
cmp(x, y) -> -1, 0, 1
参数说明
iterable
:是可迭代类型;cmp
:用于比较的函数,比较什么由key决定;key
:用列表元素的某个属性或函数进行作为关键字,有默认值,迭代集合中的一项;reverse
:排序规则. reverse = True 降序 或者 reverse = False 升序,有默认值。返回值
:是一个经过排序的可迭代类型,与iterable一样。
其中cmp
与 key
两个参数需要单独注意
cmp参数
cmp接受一个函数,拿整形举例,形式为:
1 2 | def f(a,b): return a-b |
如果排序的元素是其他类型的,如果a逻辑小于b,函数返回负数;a逻辑等于b,函数返回0;a逻辑大于b,函数返回正数就行了
key参数
key也是接受一个函数,不同的是,这个函数只接受一个元素
,形式如下
1 2 | def f(a): return len(a) |
key接受的函数返回值,表示此元素的权值,sort将按照权值大小进行排序
下面列举几个例子说明sorted()
函数的用法
1、按文件名排序
1 2 3 4 5 6 7 | def get_extension(filename): """返回当前对象的文件名,以'.'分隔后最后一个元素""" return filename.split(".")[-1] def extsort(filenames): """以文件名进行排序,其中key的值调用上面函数得出所有数组内文件名列表""" return sorted(filenames, key=get_extension) |
2、按照列表中每个对象中的第三个元素进行排序
1 2 3 4 | students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10),] >>> sorted(students, key=lambda student : student[2]) # sort by age [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)] """y""" |