python中lambda函数排序_排序 sorted函数和lambda的组合应用(python3)

时间:2025-04-02 08:34:16

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函数的组合应用进行了分析,希望对大家有所帮助。

参考文献: