2016-12-17 59 views
0

中的列表[(a,b),(c,d),...]解压缩到那里。我想用lambda函数来解压像这样的列表[(A,B),(C,d),...] 例如,现在我有两个表是这样的:如何使用lambda将python3

list1 = [1,2,3] 
list2 = [0.1,0.2,0.3] 

然后我可以使用压缩功能来生成一个新的列表如下:

l = zip(list1,list2) 

这里,l = [(1,0.1),(2,0.2),(3,0.3)] 我想做这个列表L这样的操作:

outcome_l = [1*0.1, 2*0.2, 3*0.3] 

我所知EA siest方法是定义一个lambda函数如下:

f = lambda l1,l2:l1*l2 

然后,我可能要使用这样这个lambda函数来获得结果:

outcome_l = list(map(f,l)) 

但这里的问题是,看起来lambda函数很难解压列表l中的每一个集合,并且它一直说我存在一个错误,因为“< lambda>()需要2个位置参数,但有3个是给定的”,即列表l的长度是3

那么你知道如何处理这个问题在python3中?看来,python2可能不会遭受同样的问题。

回答

1

您的函数f(因为您命名它,您应该用传统方式定义)需要两个参数。 l中的每个项目都是单个对象 - 一个元组。解决这个问题的最简单的方法是理解,这是多才多艺的,他们几乎促使Python的设计师从语言中删除map

outcome_l = [a*b for a,b in l] 

你甚至可以使用该函数f以这种方式,与*拆包:

outcome_l = [f(*item) for item in l] 
+0

可能不需要的OP,使中间'''l' ''并且在理解中只使用'''zip(...)'''。 – wwii

-1

您可以使用operator.mulmap得到您想要的结果。这个功能和你想要的一样。 从docsmap(mul, list1, list2)

采取使您的工作功能,您可以使用f = lambda x: x[0] * x[1]

+0

'operator.mul'与OP的'f'完全相同,所以你可能想提一下它是'map'的不同用法,它使它工作。 – TigerhawkT3

+0

为什么这个答案投了票?对我来说,似乎很奇怪,请降低这个答案! – ettanany

-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)]