TypeError:在python中计算点积

时间:2016-10-03 02:36:48

标签: python function python-3.x typeerror dot-product

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

例如,如果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'对象不可订阅

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

2 个答案:

答案 0 :(得分:1)

删除有问题的部分(尝试下标int):

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

答案 1 :(得分:0)

只需删除[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)