我写了一个像这样的片段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)))
当我运行此代码时,我收到此错误" TypeError:只能将元组(不是" int")连接到元组"。 有谁知道这是怎么发生的? 或者有谁知道python函数reduce如何正常工作?
答案 0 :(得分:2)
你需要提供第三个减少的参数,即initializer
。来自docs:
如果没有给出初始化器并且iterable只包含一个项目,那么 第一项被退回。
由于您没有明确提供initializer
参数,reduce
正在使用list(enumerate(val_hist))
中的第一个元素,它恰好是一个元组。您正尝试将此元组与x[1]
一起添加,这是一个整数。
因此,只需更新reduce
initializer
值为0,就像这样:
>>> reduce(lambda sum, x: sum + x[1], list(enumerate(val_hist)), 0)
>>> 48279