那里。我想用lambda函数解压缩这样的列表[(a,b),(c,d),...] 例如,现在我有两个这样的列表:
list1 = [1,2,3]
list2 = [0.1,0.2,0.3]
然后我可以使用zip函数生成一个这样的新列表:
l = zip(list1,list2)
此处l = [(1,0.1),(2,0.2),(3,0.3)]
我想在这个列表上进行操作,如下所示:
outcome_l = [1*0.1, 2*0.2, 3*0.3]
我知道最简单的方法是定义一个lambda函数,如下所示:
f = lambda l1,l2:l1*l2
然后我可能想要使用这样的lambda函数来得到结果:
outcome_l = list(map(f,l))
但问题在于,似乎lambda函数很难解压缩列表l中的每个集合,并且它一直说我存在错误,因为“< lambda>()需要2个位置参数但是3个是给定“,即列表l的长度为3。
所以你知道如何在python3中处理这个问题吗?似乎python2可能不会遇到同样的问题。
答案 0 :(得分:1)
你的函数f
(因为你命名它,你应该用传统的方式定义)需要两个参数。 l
中的每个项目都是一个对象 - 一个元组。解决这个问题的最简单方法是通过理解,这种理解非常通用,几乎促使Python设计人员从语言中删除map
。
outcome_l = [a*b for a,b in l]
你甚至可以用这种方式使用函数f
,*
解包:
outcome_l = [f(*item) for item in l]
答案 1 :(得分:-1)
您可以operator.mul
与map
一起使用,以获得所需的结果。此功能与您想要的功能相同。
取自docs map(mul, list1, list2)
要使您的功能有效,您可以使用f = lambda x: x[0] * x[1]
答案 2 :(得分:-1)
l = [(1,0.1),(2,0.2),(3,0.3)]
outcome_l = [i*j for i, j in l]
或更好:
list1 = [1,2,3]
list2 = [0.1,0.2,0.3]
outcome_l = [i*j for i, j in zip(list1, list2)]