python中lambda函数的妙用

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]) # 首先按照字符串的长短进行排序,然后按照字母顺序排序,其中的[]也可换成()

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值