如何在函数中输入未知数量的变量?

时间:2015-08-31 21:57:52

标签: python list args kwargs

我想知道如何在我的函数中输入多个变量:

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>

1 个答案:

答案 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函数。