sorted()函数和lambda函数的应用,能有效提高代码效率,但初学者容易混淆,下面对这两个函数及其应用进行分拆讲解。
一、关于函数sorted()
sorted() 函数对所有可迭代的对象进行排序操作。sorted的语法如下:
sorted(iterable,key=None,reverse=False)
参数说明:
iterable -- 可迭代对象。
key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
reverse-- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。
返回值:重新排序的列表。
二、关于函数lambda:
匿名函数lambda:是指一类无需定义标识符(函数名)的函数或子程序。lambda 函数可以接收任意多个参数 (包括可选参数) 并且返回单个表达式的值。
lambda匿名函数的格式:冒号前是参数,可以有多个,用逗号隔开,冒号右边的为表达式。其实lambda返回值是一个函数的地址,也就是函数对象。
需要要注意的是:lambda 函数包含的表达式只能是一个。
例如,定义一个返回数的平方的lambda:
a=lambda x:x*x
print(a(3))
那么输出值是:9
三、几个实际案例
看到几个sorted与lambda的例子,很有代表性,了解了这些,这两个函数使用就容易理解了
1. 对列表中的数字按字符串长度排序
b=sorted([13,1,237,89,100], key=lambda x: len(str(x)))
print(b)
----------------------------------------------------------------------
[1, 13, 89, 237, 100]
刚看到这段代码有点绕不开了,仔细拆开,就迎刃而解了。
首先,sorted里面是两个参数,一个是数列[13,1,237,89,100],另一个是lambda函数:key=lambda x: len(str(x)),这里最容易混淆的是key,可能有人会把他当成定义的lambda函数名,其实key是sorted函数中的参数名称关键字。因此,这里就是对数列按照llambda函数返回值进行排序,也就是按照转换成字符串长度排序。
很明显,按照转换的字符串长度,数列[13,1,237,89,100]长度应该依次是:[2,1,3,2,3]。
因此,对数列[13,1,237,89,100]按长度排列结果如下:
[1, 13, 89, 237, 100]
2. 按列表内运算结果排序
x=[[1,3,3],[2,3,1]]
y=sorted(x, key=lambda item:item[0]+item[2])
print(y)
--------------------------------------------------------------
[[2, 3, 1], [1, 3, 3]]
例子1中已经讲了sorted()函数的结构和key的作用。很明显这是对两个列表按照列表中第0和第2个的和排序,第1个列表第0个和第2个是1+3=4,第2个列表第0个和第2个是2+1=3,第1个列表值大于第2个列表的,因此第2个列表前移,得到结果:
[[2, 3, 1], [1, 3, 3]]
3. 对元组按元组元素值排序
x=[('a', 3), ('b',4), ('c',1)]
r=sorted(x, key=lambda y:y[1])
print(r)
--------------------------------------
[('c', 1), ('a', 3), ('b', 4)]
很明显,这个表达式是对x元组列表按照每个元组第2个元素排列,结果如下:
[('c', 1), ('a', 3), ('b', 4)]
以上内容,对sorted()和llambda函数的组合应用进行了分析,希望对大家有所帮助。
参考文献: