2016-10-03 64 views
1

我需要編寫一個Python函數,返回listAlistB(兩個列表將始終具有相同的長度並且是兩個整數列表)的成對乘積之和。TypeError:在Python中計算點積

例如,如果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' object is not subscriptable

我怎樣才能改變這種代碼,以便在列表中的元素可以成倍元素方面?

+0

移除'[0]',A是一個列表,而不是列表 – marcadian

+0

的列表。如果'listA'是整數列表,然後'listA的[I]'是一個整數。那麼你怎麼做'listA [i] [0]'? –

+0

試試'sum(a * b for a,b in zip(listA,listB))' – hpaulj

回答

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) 
1

卸下有問題的部分(在嘗試下標一個int):

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