2016-10-03 15 views
1

listAlistBのペアワイズプロダクトの合計を返すPython関数を書く必要があります(2つのリストは常に同じ長さであり、2つの整数リストです)。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はzip(listA、listB)の 'b ' – 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))]) 
関連する問題