我需要编写一个Python函数,该函数返回listAlistB的成对乘积之和(两个列表将始终具有相同的长度,并且是两个整数列表)。

例如,如果listA = [1, 2, 3]listB = [4, 5, 6],则点积为1*4 + 2*5 + 3*6,因此该函数应返回:32

到目前为止,这就是我编写代码的方式,但是会产生错误。

def dotProduct(listA, listB):
    '''
    listA: a list of numbers
    listB: a list of numbers of the same length as listA
    '''
    sum( [listA[i][0]*listB[i] for i in range(len(listB))] )


它打印:


  TypeError:“ int”对象不可下标


如何更改此代码,以便列表中的元素可以按元素相乘?

最佳答案

只需删除[0],它就会起作用:

sum( [listA[i]*listB[i] for i in range(len(listB))] )

更加优雅和可读,请执行以下操作:

sum(x*y for x,y in zip(listA,listB))

甚至更好:

import numpy
numpy.dot(listA, listB)

关于python - TypeError:在python中计算点积,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39823879/

10-09 23:38