接上一篇文章 Python速成-列表和字典
注意!注意!我这个是速成笔记!
如果要看详细的教程,建议去网上找视频看
一、Lambda表达式
开门见山,就不介绍Lambda表达式的来源了。
说白了,Lambda表达式就是def(方法)的“简单版”,只包含了方法的函数体,即一个简单的表达式,没有什么复杂的语句,表达式的计算结果就是Lambda表达式的返回值
表达式结构如下:
lambda argument_list: expression
其实就是
lambda 参数列表 : 逻辑操作
直接举例子,逻辑操作可以实现任何你想实现的,笔记只记录了最简单的例子
# 简单的逻辑,比较大小
Test = lambda x,y : x>y
print(Test(2,4))
# 简单逻辑,连接字符串
Test2 = lambda x,y,z : str(x)+y+str(z)
print(Test2(88,"连接",66))
二、sorted函数
python中的sorted函数有点像java中的Compare方法或者是CompareTo接口,就是自定义的排序方法,那么我们就需要利用到 lambda作为参数传递进去
2.1 sorted排序 可以直接使用,默认就是升序排列
sorted([3,57,2,4,7])
2.2 自定义数字排序
listTest = [[2,0],[2,1],[5,8],[4,3],[1,9]]
# 先按照第一个参数升序排序
# 如果第一个参数相同,按照第二个参数排序,升序排列
listChange = sorted(listTest,key=lambda x : (x[0],x[1]))
print(listChange )
# 如果第一个参数相同,按照第二个参数排序,降序排列
listChange = sorted(listTest,key=lambda x : (x[0],-x[1]))
print(listChange )
2.3 自定义字符串排序
# 直接按照字符串排序(abcd……的顺序)
listChar = [[4,"ab"],[2,"b"],[5,"abc"],[9,"def"]]
listChange = sorted(listChar,key=lambda x:x[1])
print(listChange)
# 统计字符串中"a"的数量,数量相同就按照序号排列
listChar = [[0,"ab"],[1,"aab"],[2,"abc"],[3,"aaaf"]]
listChange = sorted(listChar,key=lambda x:(x[1].count("a"),x[0]))
print(listChange)
2.4 题目
在写力扣的时候写到了这种需要排序的相关的题目
矩阵中战斗力最弱的K行
分享一下自己写的(可能并不是最简单的)
class Solution(object):
def kWeakestRows(self, mat, k):
# 记录每一行的1的数量
listNum = []
for index in range(len(mat)):
listMat = mat[index]
listNum.append([listMat.count(1),index])
listChange = sorted(listNum,key=lambda x:(x[0],x[1]))
# 记录最后的输出
listPrint = []
for i in range(0,k):
listPrint.append(listChange[i][1])
return listPrint