2017-01-30 7 views
0

私はデータセット上のディリクレの分布を計算しなければならないプロジェクトに取り組んでいます。 Benjamin Bengfortによって開発されたthis tutorialにいくつかのコードが見つかりました。python 3.4とpython 2.7のmap、enumerate、lambdaの違いは?

from collections import Counter 

train_list = [1,2,1,2,1,3,4,1,2,3] 
counter = Counter(train_list) 
votes = [counter.get(n,0) for n in range(1,5)] 
prior = [2,2,2,2] 
posterior = map(sum, zip(votes, prior)) 
weights = map(lambda i: (i[0]+1)*i[1], enumerate(posterior)) 
N = sum(posterior) 
print(float(sum(weights))/N) 

が、私は両方のpython 3.5とPython 2.7でコードを実行しました:私は理解し、与えられたリンクのコードをテストする場合は、この基本的なコードを開発したトレーニング例として


私はtrain_listを変更するかどうかに関わらず、常にPython 3.5で同じ結果を返します。
しかし、python 2.7では、train_listの値を変更するたびに変更されるので、正しい答えと思われる浮動小数点数が得られます。
なぜそれが起こるのか分かりませんか?
python 2.7とpython 3.5のmap、lambdaまたはenumerate関数のプロシージャの違いかもしれません。
誰でも私がpython 3.5でコードを修正するのを助けることができたら非常に感謝します。

答えて

0

回答が見つかりました。 Josh Leeから
おかげで、私はこれにコードを修正し、それがPythonの3.5とPython 2.7の両方で同じ値が返されました:

from collections import Counter 

train_list = [1,2,1,2,1,3,4,1,2,3] 
counter = Counter(train_list) 
votes = [counter.get(n,0) for n in range(1,5)] 
prior = [2,2,2,2] 
posterior = list(map(sum, zip(votes, prior))) 
weights = map(lambda i: (i[0]+1)*i[1], enumerate(posterior)) 
N = sum(posterior) 
print(float(sum(weights))/N) 
関連する問題