如何使用lambda在python3中解压缩这个列表[(a,b),(c,d),...]

时间:2016-12-17 07:24:36

标签: python list lambda

那里。我想用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可能不会遇到同样的问题。

3 个答案:

答案 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.mulmap一起使用,以获得所需的结果。此功能与您想要的功能相同。 取自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)]