2016-07-22 12 views
1

が、私はこのPythonの:私はこのコードを実行したとき

import random 

val_hist = [] 
for i in range(100): 
    val_hist.append(random.randint(0,1000)) 


def print__(x): 
    print type(x[1]) 
map(lambda x: print__(x), list(enumerate(val_hist))) 

l_tmp = list(enumerate(val_hist)) 
idx_list = map(lambda x: x[0], l_tmp) 
val_list = map(lambda x: x[1], l_tmp) 

print idx_list 
print val_list 

reduce(lambda sum, x: sum + x[1], list(enumerate(val_hist))) 
print reduce(lambda sum, x: sum + x, val_hist) 
print reduce(lambda sum, x: sum + x[1], list(enumerate(val_hist))) 

のようにピースPythonコードを書いた「タプルする 『(int型はTypeErrorのみタプルではない)』を連結することができます」、私はこのエラー「TypeError例外を得た:することができる唯一のタプル( "int"ではなく)をタプルに連結します。 これはどのように起こったのですか? 誰かがpythonの関数reduceが正確に動作する方法を知っていますか?

+0

あなたは[ドキュメント](https://docs.python.org/2/library/functionsを読んでみました.html#reduce)? –

答えて

2

reduceの第3引数(initializer)を指定する必要があります。 docsから:あなたが明示的initializerパラメータを提供していないので

If initializer is not given and iterable contains only one item, the first item is returned.

reduceはタプルであることを起こるlist(enumerate(val_hist))から最初の要素を、使用しています。このタプルを整数であるx[1]と一緒に追加しようとしています。だから、

、そのように単純に、0のinitializer値を使用してreduceを更新:

>>> reduce(lambda sum, x: sum + x[1], list(enumerate(val_hist)), 0) 
>>> 48279 
+0

はい、意味があります。どうもありがとうございました。 –

+0

@bozhou cool、最高の答えを「受け入れた」とマークすることを忘れないでください:) –

関連する問題