2016-07-22 64 views
1

我寫了一段Python代碼這樣Python的「類型錯誤:只能拼接元組(而不是‘INT’),以元組」

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

當我運行這段代碼,我得到這個錯誤「類型錯誤:只能連接元組(不是「int」)到元組「。 有誰知道這是怎麼發生的? 還是有人知道python函數如何精確地減少工作?

+0

您是否嘗試過閱讀[文件](https://docs.python.org/2/library/functions的.html#減少)? –

回答

2

您需要提供第三個參數來減少,這就是initializer。從docs

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

既然你沒有明確提供initializer參數,reduce使用來自list(enumerate(val_hist))的第一要素,這恰好是一個元組。你試圖將這個元組與x[1]一起添加,這是一個整數。

所以,只需更新您的reduceinitializer值0,像這樣:

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

是的,這很有道理。非常感謝你。 –

+0

@bozhou酷,不要忘記標記爲「接受」的最佳答案:) –

相關問題