Python中的sort和lambda函数
⼀、sort在Python中存在两种形式,分别是sorted(str),另⼀种是list.srot()
1. sorted()函数是Python的内置函数,具体形式为sorted(iterable, cmp=None, key=None, reverse=False),其中iterable是可迭代
对象,包括列表、元组、字典、字符串;cmp代表⽐较函数;key代表迭代对象中的某个属性,如某个元素的下标;reverse代表升序或者降序
例如:
students = [(‘john’, ‘A’, 15), (‘jane’, ‘B’, 12), (‘dave’, ‘B’, 10)]
sorted(students, key=lambda student : student[2])sort函数 js
结果如图:
lambda函数⽤法举例:
L=[('b',2),('a',1),('c',3),('d',4)]
#2、利⽤参数 cmp 排序
sorted(L,cmp=lambda x,y:cmp(x[1],y[1]))
结果:
[('a',1),('b',2),('c',3),('d',4)]
#3、利⽤参数 key 排序
sorted(L, key=lambda x:x[1])
#结果:
[('a',1),('b',2),('c',3),('d',4)]
#4、按年龄升序
students =[('john','A',15),('jane','B',12),('dave','B',10)]
sorted(students, key=lambda s: s[2])
结果:
[('dave','B',10),('jane','B',12),('john','A',15)]
#5、按年龄降序
sorted(students, key=lambda s: s[2], reverse=True)
#结果:
[('john','A',15),('jane','B',12),('dave','B',10)]
2. sort函数是针对列表的,不改变原有的列表
例如:
⼆、lambda函数
1. lambda的语法形式
lambda [arg1 [,arg2,…argn]]:expression
其中lambda是关键字;
[arg…] 是参数列表,可以是多个,也可以是⼀个;
expression 是⼀个参数表达式,表达式中出现的参数需要在[arg…]中有定义,并且表达式只能是单⾏的,只能有⼀个表达式。
2. lambda函数是没有名字的;
3. 输⼊是传⼊到参数列表[arg1 [,arg2,…argn]]的值,输出是根据表达式expression计算得到的值。
4. lambda的⽤法
lambda x, y: x*y  # 函数输⼊是x和y,输出是它们的积x*y
lambda:None    # 函数没有输⼊参数,输出是None
lambda *args: sum(args)  # 输⼊是任意个数参数,输出是它们的和(隐性要求输⼊参数必须能进⾏算术运算)
lambda **kwargs: 1  # 输⼊是任意键值对参数,输出是1
5. 将lambda函数赋值给⼀个变量,通过这个变量间接调⽤该lambda函数。
例如:
add = lambda x, y: x+y
相当于定义了加法函数lambda x, y: x+y,并将其赋值给变量add,这样变量add就指向了具有加法功能的函数。
这时我们如果执⾏add(1, 2),其输出结果就为 3。
6. 将lambda函数赋值给其他函数,从⽽将其他函数⽤该lambda函数替换。
例如:
#为了把标准库time中的函数sleep的功能屏蔽(Mock),我们可以在程序初始化时调⽤:
time.sleep=lambda x: None
#这样,在后续代码中调⽤time库的sleep函数将不会执⾏原有的功能。
#例如:
time.sleep(3) # 程序不会休眠 3 秒钟,⽽是因为lambda输出为None,所以这⾥结果是什么都不做、
三、sort函数和lambda函数结合使⽤
假如a是⼀个由元组构成的列表,对该列表进⾏排序时,我们需要⽤到参数key,也就是关键词,如下⾯代码所⽰,lambda是⼀个匿名函数,是固定写法;x表⽰匿名函数的输⼊,即列表中的⼀个元素,在这⾥,表⽰⼀个元组,x只是临时起的⼀个名字,你可以使⽤任意的名字;x[0]表⽰匿名函数的输出,
即元组⾥的第⼀个元素,即key = x[0];所以这句命令的意思就是按照列表中第⼀个元素进⾏排序
a =[('b',4),('a',12),('d',7),('h',6),('j',3)]
a.sort(key=lambda x: x[0])
print(a)<br>>>>[('a',12),('b',4),('d',7),('h',6),('j',3)]

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。