我想知道如何在我的函数中输入多个变量:
def Dot_Product(Vector1,Vector2):
return sum([x*y for x,y in zip(Vector1,Vector2)])
print Dot_Product([1,2,1],[1,1,1])
我已经查看了* args和** kwargs,但我不确定如何实现这一点,以便列表理解也会迭代未知数量的变量。我不确定它是否可能,如果有任何替代方案,我们将不胜感激。 我理解* args和** kwargs是如何工作的但是我不确定如何实现一个列表解析,它将迭代未知数量的变量,如给出的示例我只能迭代x,y或x,y,只要知道n是什么数字,就可以在任何一个列表中列出z或n个列表。由于我不知道如何更改列表理解来处理它?</ p>
答案 0 :(得分:3)
您可以尝试这种方法:
multiplication = lambda x,y: x*y
def dot_product(*args):
return sum([reduce(multiplication, arg) for arg in zip(*args)])
然后你可以传递任意数量的参数:
In [5]: print dot_product([1,2,1], [1,1,1])
4
In [6]: print dot_product([1,2,1], [1,1,1], [1,1,1])
4
您可以在此处查看reduce功能
我认为您还需要验证所有项目都是列表,并且它们具有相同的长度。
另外,作为@PauloAlmeida的建议,标准库提供给我们时不需要乘法变量,我们可以像这样导入:
from operator import mul
然后我们可以使用mul
代替乘法变量,这些变量代表reduce函数上使用的lambda函数。