1、 lambda函数的内涵:
(1)定义:lambda表达式,又名匿名表达式。是指一类无需定义标识符(函数名)的函数或子程序,通俗来说是指你需要一个函数,却又不想去给这个函数命名。
(2)格式:lambda 参数 :返回值,其中参数可以是一个也可以是多个。
(3)注意:lambda 并不会带来程序运行效率的提高,只会使代码更简洁。
2、例子说明
(1)求两数的和
完整函数实现如下:
>>> def add(x,y):
return x + y
>>> add(3,4)
7
等价的lambda函数实现为:
>>> res = lambda x,y:x + y
>>> res(3,4)
7
(2)lambda函数在排序中的应用
lambda在列表中的排序:
>>> a = [[1,9],[3,11],[5,7]]
>>> a.sort(key = lambda p: p[0]**2 + p[1]**2) # 按照到原点距离排序
>>> print(a)
[[5, 7], [1, 9], [3, 11]]
lambda在字典中的排序:
>>> a = {1:4,2:1,4:3}
>>> sorted(a,key = lambda x:a[x]) # 按照键所对应的值从小到大对键排列
[2, 4, 1]
sorted(a,key = lambda x:-a[x]) # 按照键所对应的值从大到小对键排列
[1, 4, 2]
lambda在字符串中的排序:
问题1:【leetcode 179】给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。
def largestNumber(nums):
if any(nums):
from functools import cmp_to_key
nums = sorted([str(m) for m in nums], key=cmp_to_key(lambda x, y: int(x + y) - int(y + x)), reverse=True)
return ''.join(nums)
return '0'
nums = [3,30,34,5,9]
a = largestNumber(nums)
print(a)
ans:9534330
python3中的cmp_to_key等价于python2中的cmp。cmp_to_key()有两个传入参数x,y :
① 当x>y时,返回1。
② 当x=y时,返回0。
③ 当x<y时,返回-1。
列表中的工作机制就是将列表中的元素两两比较,返回值是正数时交换两元素
问题2:【leetcode 524】给定一个字符串和一个字符串字典,找到字典里面最长的字符串,该字符串可以通过删除给定字符串的某些字符来得到。如果答案不止一个,返回长度最长且字典顺序最小的字符串。如果答案不存在,则返回空字符串。
def findLongestWord(s, d):
d.sort(key=lambda x: [-len(x), x]) # 首先按照字符串的长短进行排序,然后按照字母顺序排序,其中的[]也可换成()
res = ''
for i in d: # i取其中的一个字符串
index = 0 # 索引
flag = 1 # 判断是否正常退出for循环
for j in i: # j取字符串中的一个字符
k = s.find(j, index) # 从s的索引为inde开始查找s中是否包含j,如果找到返回索引,否则-1
if k == -1: # 没有找到
flag = 0 # 异常退出
break
index = k + 1
if flag == 1:
res = i
break
return res
s = "abpcplea"
d = ["ale","apple","monkey","plea"]
print(findLongestWord(s, d))
ans:"apple"
d.sort(key=lambda x: [-len(x), x]) # 首先按照字符串的长短进行排序,然后按照字母顺序排序,其中的[]也可换成()