函数 sort()用于列表中元素的排序
list.sort() 不会返回对象,并没有创建新对象,会改变原有的list,所以元祖(tuple)不可以用list排序,元祖不可变.
函数sort()会默认按照升序排列,能否让sort()函数按我们想要的排列方式进行排列呢?
sort()函数原型:list.sort(key=None,reverse=False)
一、sort的基本参数
(1)key参数:key接受的是一个只有一个形参的函数,形式如下:
def f(a)
return len(a)
key接受的函数返回值,表示此元素的权值,sort将按照权值大小进行排序
代码如下:
li = ["bb","a","ccc","dddd","e"]
li.sort()
print(li) #['a', 'bb', 'ccc', 'dddd', 'e']
这是默认的排序方式,但是加权值之后...
def f(a):
return len(a)
li.sort(key=f)
print(li) #['a', 'e', 'bb', 'ccc', 'dddd']
注:权值返回的是len(a),相当于比较每个元素的长度,所以是#['a', 'e', 'bb', 'ccc', 'dddd'],最开始默认的sort是按照a b c d e的字母顺序排列,假如把返回值变为1---return 1的话,输出的还是['bb', 'a', 'ccc', 'dddd', 'e'] 是写列表时候最原始的顺序
所以个人理解,权值就是自己定义的一种排序规则,想怎么都可以。
(2)reverse参数
reverse接受的是一个bool类型的值 (Ture or False),表示是否颠倒排列顺序,一般默认的是False,注意第一个字母是大写的
代码如下:
li = ["bb","a","ccc","dddd","e"]
li.sort(reverse=True)
print(li) #['e', 'dddd', 'ccc', 'bb', 'a']
(3)补充说明
在python2里面的sort()函数是有三个参数的:L.sort(cmp=None, key=None, reverse=False)
其中的cmp在python3里面已经被删除了
cmp参数:
cmp接受一个函数,拿整形举例,形式为:
def f(a,b):
return a-b
如果排序的元素是其他类型的,你所定义的这个函数只需满足a逻辑小于b,函数返回负数;a逻辑等于b,函数返回0;a逻辑大于b,函数返回正数就行了,cmp()函数本身在python2里是一个内置函数
二、sort与sorted
sort()方法是list内置排序
sorted()方法是python内置的全局排序方法,对可迭代的序列排序生成新的序列。
先看一段代码:
a=[9,8,7,6,5,4,3,2,1]
a.sort()
print(a) #[1,2,3,4,5,6,7,8,9]还是a这个数列,只不过顺序变了
b=[9,8,7,6,5,4,3,2,1]
c=sorted(b)
print(b) #[9,8,7,6,5,4,3,2,1] b顺寻没变 ,还是原来的b
print(c) #[1, 2, 3, 4, 5, 6, 7, 8, 9] c是新生成的数列,是b拍完顺序的
由以上可知,list.sort()方法会按照升序将列表重新排列,不会保留原列表。而sorted()会返回副本,原始输入不变。
sorted()也是一个高阶函数,它可以接收一个比较函数来实现自定义排序,比较函数的定义是,传入两个待比较的元素x,y,如果x应该排在y前面,则返回-1;如果x应排在y后面,则返回1;如果x与y相等,则返回0。
因此,如果要实现倒序排列,只需编写一个reverse_cmp函数:
def reversed_cmp(x, y):
if x > y:
return -1
if x < y:
return 1
return 0
如此,调用sorted()并传入reverse_cmp就可以实现倒序排列:
sorted([36, 5, 12, 9, 21], reversed_cmp) #排序完就是[36, 21, 12, 9, 5]
注:sorted()对字符串排序时,默认按照ASCII码大小比较,顺序是A,B,C...X,Y,Z...a,b,c...x,y,z
Python3 sort 使用自定义__cmp__ python sort默认
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Vue3 自定义ref(customRef)
Vue3 自定义ref(customRef)
Vue customRef 自定义ref -
python3教程:sort()方法的cmp参数
python3教程:sort()方法的cmp参数
python 升序 自定义 -
Python 使用列表的sort()进行多级排序实例演示,list的sort()排序方法使用详解,python3中sort()的cmp自定义排序方法,sort()的逆序、倒叙排序方法
Python 列表 sort 排序方法使用详解第一章:常规功能① sort() 的默认排序② sort() 的多级排序实例演示③ sort() 的逆序、倒叙排序④ sort() 方法的源码第二章:扩展功能① sort() 的 cmp 自定义排序方法② sort() 的 cmp 引用 lambda 函数实现自定义排序Python 使用列表的sort()进行多级排序实例演示,list的sort()排序方法使用详解,python3中sort()的cmp自定义排序方法,sort()的逆序、倒叙排序
python的sort排序 list的sort排序 原力计划 逆序 python