【问题标题】:Python "TypeError: can only concatenate tuple (not "int") to tuple"Python“TypeError:只能将元组(不是“int”)连接到元组”
【发布时间】:2016-07-22 15:58:21
【问题描述】:

我写了一段这样的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: can only concatenate tuple (not "int") to tuple”。 有谁知道这是怎么回事? 或者有人知道python函数reduce是如何工作的吗?

【问题讨论】:

标签: python lambda


【解决方案1】:

您需要为 reduce 提供第三个参数,即initializer。来自docs

如果没有给出初始值设定项且可迭代项仅包含一项,则 第一项被退回。

由于您没有显式提供initializer 参数,reduce 正在使用来自list(enumerate(val_hist)) 的第一个元素,它恰好是一个元组。您正在尝试将此元组与 x[1] 一起添加,这是一个整数。

因此,只需将 reduce 更新为 initializer 值为 0,如下所示:

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

【讨论】:

  • 是的,这是有道理的。非常感谢。
猜你喜欢
  • 2013-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多