lambda 表达式在 Python 中接受两个参数时出错
Error when the lambda expression is taking two arguments in Python
我是 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'
您将单个列表作为 map
的参数,因此 map
一次用列表中的一个元素调用您的 lambda
- 即 one 参数,即使它是一个元组。您可能想要的是:
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)) )
在您的打印中,map
将在元组列表上调用函数 lambda(因为 list(zip(list1, list2))
生成元组列表)。
所以例如你可以这样做:
print(list(map(lambda(v1,v2): (v1**2, v2**2), list(zip(list1, list2)))))
您的 lambda 函数将使用元组 (v1,v2) 作为参数,而不是两个参数。
我是 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'
您将单个列表作为 map
的参数,因此 map
一次用列表中的一个元素调用您的 lambda
- 即 one 参数,即使它是一个元组。您可能想要的是:
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)) )
在您的打印中,map
将在元组列表上调用函数 lambda(因为 list(zip(list1, list2))
生成元组列表)。
所以例如你可以这样做:
print(list(map(lambda(v1,v2): (v1**2, v2**2), list(zip(list1, list2)))))
您的 lambda 函数将使用元组 (v1,v2) 作为参数,而不是两个参数。