sort和sorted基础理解
source_list = [ 5, 2, 3, 8, 6 ]
sort是一个方法,sorted是一个函数,有点面向对象基础的都能区分二者。正因如此,sort和sorted的调用形式有区别,sort是list数据类型的一个内置方法,也就是说,一个 list 对象 source_list 可以通过点调用如下:
source_list . sort(key=None, cmp=None, reverse=False)
注意:1. 一定只能是list对象才能调用,如果你用str,dict, set, tuple 类型实例去调用都抛出异常,告诉你没有sort这个attribute。
2. sort方法调用结束后没有返回值,切记切记,不要再继续调用什么了,或是作为参数传给其他方法。
3. sort方法调用结束后调用者内容已经是排序以后结果,那么上述调用完成source_list为 [2, 3, 5, 6, 8]
sorted是一个python内置函数,在调用时要把所要进行排序的对象当作参数传给sorted函数,其调用形式如下:
sorted(data, key=None, cmp=None, reverse=False)
注意:1. 如果传给data不是list,而是str,dict, set, tuple 类型实例,那么sorted方法能正常工作吗?留给读者亲自尝试。
2. sorted函数调用结束后有返回值,返回值是一个list类型。
3. sorted函数调用结束后data内容保持不变,也就是说sorted(source_list)结束,source_list自身内容仍是[ 5, 2, 3, 8, 6 ]
key, cmp, reverse参数作用
sort和sorted除了排序效率极高之外,精华之处便是这几个参数设定,我们一个一个看。
source_list = [[2,9], [1,5], [3,7], [5,8]]
reverse = False
reverse很好理解。sort和sorted都是按照从升序排列,reverser默认为False,一旦将reverse置为True,sort和sorted将按照降序排列。
source_list . sort(reverse=False)
调用结束后,无返回但source_list为:[[5, 8], [3, 7], [2, 9], [1, 5]]
key
表示sort方法排序的关键字,例如现在需要将source_list按照每个元素中的第1号位元素排序,可以配置key参数,配合lambda使用是最常见用法,调用形式如下:
source_list . sort(key=lambda x : x[1]) # 结果是:[[1, 5], [3, 7], [5, 8], [2, 9]]
lambda是python一种定义匿名函数的用法, 网上有详细介绍,
cmp
cmp参数接收一个整数,比照python内置方法cmp(a, b),a>b, 1; a==b, 0; a<b, -1。常见的也是和lambda结合使用:
source_list . sort(key=lambda x,y : cmp(x[1], y[1])) # 结果也是:[[1, 5], [3, 7], [5, 8], [2, 9]]
那么以下调用返回什么呢?
source_list . sort(cmp=lambda a, b : 1 if a[0]<b[0] else -1)
可以自己试一下。
sorted和sort这三个参数没有区别,只是要把原始的source_list作为参数第一个传给sorted方法。