我是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'
答案 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)作为参数,而不是两个参数。