lambda函数(配合map函数)以及[x for x in]的超详细解释(实例+原理)

lambda

定义

一个匿名函数,见下面

格式以及使用方法:

lambda x(传入的参数):要执行的语句(这条语句执行完之后,就会返回一个值,也就是函数的返回值)
例:
lambda x:x+2
上面那条语句就相当于定义了一个函数,但是怎么用这个函数呢?
可以写f=lambda x:x+2
f(3)
到最后会输出9
其中 x就相当于传入的参数,x+2也就是我们要执行的语句
实际上就相当于
def f(x):
   return x+2

高级用法(和for与map连用):

与for连用:

以下是几种错误的例子:
①f=lambda x:x*i for i in range(4)
②f=lambda x:’’.append(i) for i in x.split(’ ‘)
③f=’’.join([lambda x:i for i in x.split(’ ‘)])
④f=lambda x:’’.append(i) for i in range(4)

这是令我误入歧途,但实际上正确的一个例子
f = [lambda x:x*i for i in range(4)]

对错误例子的分析

①f=lambda x:xi for i in range(4)
一定要注意!!!! m for m in xxxxx是python中for的高级用法,
只能,也必须返回一个列表!!!!!!!而且每一个m不能来进行其他“不能返回一个元素(装到列表里)”的操作
也就是说,他不能这样写(假设现在有a_dict={1:5,0:7}):
[a_dict[m]=1 for m in range(2)] (这样写会报 invalid syntax错)
但是可以[a_dict[m] for m in range(2)]这样写
这是因为 a_dict[m]=1,这么写没有返回值,但是如果写a_dict[m],那么对于每一个m,a_dict[m]都会返回一个值,比如m=1,那a_dict[m]=5,这个是可以装到列表里的


现在回来看一下f=lambda x:xi for i in range(4) ,其实xi for i in range(4)这么写是没有错的,错误的是 for的高级用法返回的是一个列表,必须用一个[]给他套起来
也就是必须写成 f=lambda x:[x
i for i in range(4)]

②和③
其实都犯了一个错误 就是[]没套上,或者套错了地方
②和④ 当时我是咋想的呢,我估计以为 ‘’ 这个能使一个全局的东西了吧(说不清楚)
③呢是因为 []套错地方了
也就是f=’’.join([lambda x:i for i in x.split(’ ‘)])
应该把那个[放到右边去 也就是
f=’’.join(lambda x:[i for i in x.split(’ ‘)]),这样就对了,
因为!!!是lambda x:的里面才是返回值,而不是lambda x:i for i in x.split(’ ')是个返回值

正确例子:

a=prefix_title.applymap(lambda x:’’.join([str(word_id_dict[y])+’ ’ for y in x.split(’ ')]))
我想让句子中的单词都映射成对应的编号
比如 我 是 你 爸爸
可以编码成 0 2 1 3
我的思路是将矩阵中每一个位置的元素(也就是每一个句子)取出来
然后 按空格分成一个数组,对数组中每一个元素进行遍历,映射为一个个数字
然后把这些数字直接拼成一个字符串(用join函数就行)

与map连用(以后更新)

  • 8
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值