Python" TypeError:只能将元组(不是" int")连接到元组"

时间:2016-07-22 07:43:00

标签: python lambda

我写了一个像这样的片段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如何正常工作?

1 个答案:

答案 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