lambda表达式在Python中使用两个参数时出错

时间:2017-07-21 07:55:23

标签: python lambda python-3.6

我是Python新手并练习基础知识。我使用lambda表达式来获取两个参数并对它们执行方形运算(例如:var ** 2)。这两个论点来自zip(list1, list2)。我为此获得了TypeError。我试着寻找解决方案,但没有得到任何解决方案。我甚至尝试在括号中编写lambda参数(例如:lambda (v1,v2):)但是扔了SyntaxError

下面是python代码:

list1 = [1,2,3,4]
list2 = [5,6,7,8]
print ( list(map(lambda v1,v2: (v1**2, v2**2), list(zip(list1, list2)))) )

错误:

TypeError                                 Traceback (most recent call last)
<ipython-input-241-e93d37efc752> in <module>()
      1 list1 = [1,2,3,4]
      2 list2 = [5,6,7,8]
----> 3 print ( list(map(lambda v1,v2: (v1**2, v2**2), list(zip(list1, list2)))) )

TypeError: <lambda>() missing 1 required positional argument: 'v2'

2 个答案:

答案 0 :(得分:8)

您正在为map提供一个列表作为参数,因此map一次调用您的lambda列表中的一个元素 - 即一个论证,尽管它是一个元组。你可能想要的是:

print ( list(map(lambda v: (v[0]**2, v[1]**2), zip(list1, list2))) )

以便列表中的项目作为唯一参数传递给lambda。 如果您坚持使用双参数lambda,请弃掉zip并将您的列表直接传递给map作为单独的参数:

print ( list(map(lambda v1,v2: (v1**2, v2**2), list1, list2)) )

答案 1 :(得分:0)

在你的打印中,map将在元组列表中调用函数lambda(因为list(zip(list1, list2))生成一个元组列表)。

例如,您可以这样做:

print(list(map(lambda(v1,v2): (v1**2, v2**2), list(zip(list1, list2)))))

你的lambda函数将使用元组(v1,v2)作为参数,而不是两个参数。