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

Nik*_*hil 3 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)))) )
Run Code Online (Sandbox Code Playgroud)

错误:

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'
Run Code Online (Sandbox Code Playgroud)

Bło*_*tek 8

你给一个列表作为参数map,因此一次map调用你lambda的列表中的一个元素 - 这是一个参数,即使它是一个元组.你可能想要的是:

print ( list(map(lambda v: (v[0]**2, v[1]**2), zip(list1, list2))) )
Run Code Online (Sandbox Code Playgroud)

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

print ( list(map(lambda v1,v2: (v1**2, v2**2), list1, list2)) )
Run Code Online (Sandbox Code Playgroud)