Python的“类型错误:只能拼接元组(而不是‘INT’),以元组”

问题描述:

我写了一段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#减少)? –

您需要提供第三个参数来减少,这就是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酷,不要忘记标记为“接受”的最佳答案:) –