python中lambda expression及lambda排序

Anonymous function : lambda
lambda是expression不是statement, 其作用如下:

1, 将函数整体赋值给一个变量

a=lambda x,y:x*y
a(2,3) 
#输出 6
'''x,y作为变量, ':'前的是parameters, ':'后的是函数主体statement '''
x=lambda a:abs(a-3) # abs(parameter)abs只能取一个参数
x(5) #输出2

'''例题 leetCode 658题. Find K Closest用内部函数处理'''
# lst中离4最近的3个元素
lst=[1,2,3,4,5]
sorted(lst,key=lambda x:abs(x-4))
#output : [4, 3, 5, 2, 1]

sorted(sorted(lst, key=lambda a:abs(a-3))[0:3])
#output : [3, 4, 5]

2, 将函数赋值给一个函数

def lam(*args): 
    for value in args:
        return sum(value)#返回的是一个lambda函数整体
b=lam((2,3)) # lam()原来的函数定义返回x+y
print("b=",b)

# 把lambda函数赋值给函数lam()
lam=lambda x,y:x*y #把x*y函数赋值给lam()函数
a=lam(2,3)
print("a=",a)

3, 作为返回值返回

'''1, function sans parameters'''
def lam(): 
    return lambda x,y:x*y #返回的是一个lambda函数整体
a=lam()
a(2,3)
# 输出 6
'''2, function avec parametre'''

def lam(a,b):
    print(a+b)
    return lambda a,b:a*b #这里的a与b与lam(a,b)函数中的参数无关,
a=lam(50,60)  #这里a是一个函数类型,因为他接受的是return出来的lambda函数
a(2,3)
#输出 110	6


# 上面函数的简单修改
def lam(a,b):
    return a+b    # 函数内部遇到第一个return函数会直接返回打印,第二个return函数不再执行
    return lambda a,b:a*b
a=lam(50,60) 
a # 这里a表示a+b的值,是一个int类型,因为a接收到的是return出来的a+b的结果
#输出  110 

4, 作为参数传递给其他函数

1, filter()

'''1, filter'''
b=filter(lambda x : x**2, [3,4])
list(b),b 
#输出 : ([3, 4], <filter at 0x37de6f8>)

2, map()

'''2, map'''
c=map(lambda x: x % 2 == 0, [1, 2, 3])
list(c),c
# output : ([False, True, False], <map at 0x3808a60>)

3, reduce()

'''3, reduce'''
import functools
lst= [1, 2, 3, 4, 5, 6, 7, 8, 9]
# 将列表lst中的元素从左往右两两以逗号分隔的字符的形式依次结合起来
d=functools.reduce(lambda a, b: '{}, {}'.format(a, b), lst)
type(d), d
# output : (str, '1, 2, 3, 4, 5, 6, 7, 8, 9')

关于"{}".format()

"{},{}".format(3,4)
# output: '3,4'

4, sorted() & sort()
sorted()和sort()用lambda进行排序

sorted(iterable, cmp=None, key=None, reverse=False)

sorted()返回重新排序的列表,不改变原列表

list.sort(cmp=None, key=None, reverse=False)

sort() 无返回值 ,对原列表彻底排序

1, iterable – 可迭代对象。
2, cmp – 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。
3, key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
4, reverse – 排序规则,reverse = True 降序 , reverse = False 升序(默认)。

4.1 以第一个元素升序排序
没有指明其他元素的排序方式则,其他元素按原来的顺序排序
漏掉’key='会报错

'''排序方法 1'''
#以第一个元素升序排序,没有指明其他元素的排序方式则,其他元素按原来的顺序排序
lst=[[5,8],[4,3],[6,1],[4,2]]
sorted(lst,key=lambda x:x[0])
# output : [[4, 3], [4, 2], [5, 8], [6, 1]]

4.2 元素的第二个元素升序排列

# 元素的第二个元素升序排列
lst=[[5,8],[4,3],[6,1],[4,2]]
sorted(lst,key=lambda x:x[1]),   lst
#output : ([[6, 1], [4, 2], [4, 3], [5, 8]],
 # [[5, 8], [4, 3], [6, 1], [4, 2]])

4.3 先以第二个元素的升序排序,再以第一个元素的升序排序

#先以第二个元素的升序排序,再以第一个元素的升序排序
lst=[[5,8],[4,3],[6,1],[4,2]]
sorted(lst,key=lambda x: (x[1],x[0]))
# output : [[6, 1], [4, 2], [4, 3], [5, 8]]

4.4 先以第二个元素的倒叙排序,再以第一个元素的降序排序

# 先以第二个元素的倒叙排序,再以第一个元素的降序排序
lst=[[5,8],[4,3],[6,1],[4,2]]
sorted(lst,key=lambda x:(x[1],x[0]), reverse=True)
# output : [[5, 8], [4, 3], [4, 2], [6, 1]]

4.5 先以第二个元素升序排列,再以第一个元素降序排列

#以第二个元素升序排列,再以第一个元素降序排列
lst=[[5,8],[4,3],[6,1],[4,2]]
sorted(lst,key=lambda x:(x[1],-x[0]))
# output : [[6, 1], [4, 2], [4, 3], [5, 8]]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值