分享python面试题中的两道关于zip(),map()函数和匿名函数lambda的题

面试题1

题目要求:
现有两个元组,((“a”),(“b”)),((“c”),(“d”)). 请使用python中的匿名函数生成列表[{“a”:“c”},{“b”:“d”}]

'''
做法(一)
所用的知识点:zip,lambda
'''
it = zip((("a"),("b")),(("c"),("d")))
func = lambda tup:{tup[0]:tup[1]} #匿名函数
lis = []
for i in it:
    dic = func(i)
    lis.append(dic)
print(lis)
'''
做法(二)
所用的知识点:zip、lambda、map
'''
it = zip((("a"),("b")),(("c"),("d")))
func = lambda tup:{tup[0]:tup[1]} #匿名函数
ret = map(func,it)  #map方法
print(list(ret))
'''
做法(三)
是对做法二的简写
'''
print(list(map(lambda tup:{tup[0]:tup[1]},zip((("a"),("b")),(("c"),("d"))))))

面试题2

题目要求:
以下代码的输出是什么?给出答案并解释。
代码1

def multipliers():
    return [lambda x:i*x for i in range(4)]
print([m(2) for m in multipliers()])

输出结果:

[6, 6, 6, 6]

解析:

'''
代码1就相当于:以下代码:
'''
def multipliers():
    i = 3
    return [lambda x:i*x ,lambda x:i*x,lambda x:i*x,lambda x:i*x ]#返回了一个含有四个函数的列表,此时,函数都未执行

lis = []
for m in multipliers():
    ret = m(2) #m()就是其中的一个函数,此时函数才执行,这时,i经过for循环,已经是3了。
    lis.append(ret)
print(lis)

代码2

def multipliers():
    return (lambda x:i*x for i in range(4)) #此处改为了生成器表达式,返回一个生成器。
print([m(2) for m in multipliers()])

输出结果

[0, 2, 4, 6]

解析:

当m(2)执行一次 才在生成器中生成一个,所以第一次的执行m(2)的时候i=0,第二次的时候i=1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值