【问题标题】:TypeError in Python due to empty sequencePython中的TypeError由于空序列
【发布时间】:2017-04-27 16:16:32
【问题描述】:

我正在使用一个简单的脚本:

def get_stories(self, f):
     data = [([], [u'Where', u'is', u'the', u'apple', u'?'],u'office')]
     flatten = lambda data: reduce(lambda x, y: x + y, data)
     data = [(flatten(story), q, answer) for story, q, answer in data]
     return data 

TypeError: reduce() of empty sequence with no initial value

但是数据不为空!!

为什么会发生这个错误。

非常感谢您的帮助。

【问题讨论】:

  • story[]。你正在尝试reduce
  • 所以把它分成几块,并确保它们每个都有效。或者,如果您在理解扁平单行时遇到困难,请不要将其写成单行,写出循环。

标签: python python-2.7 list function


【解决方案1】:

错误消息通过声明“没有初始值”,很好地提示了如何解决问题。以下是reduce 的文档要说的内容:

reduce函数可迭代[,初始化器])

将两个参数的函数从左到右累加到iterable的item上,从而将iterable缩减为单个 价值。例如,reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) 计算 ((((1+2)+3)+4)+5)。左边的参数 x 是累积的 value 和正确的参数 y 是来自 可迭代的。 如果存在可选初始化器,则将其放在前面 计算中可迭代的项目,并作为默认值 当迭代为空时。如果没有给出初始化器并且是可迭代的 仅包含一项,则返回第一项。 [强调]

所以你的flatten 函数应该是这样的:

    flatten = lambda data: reduce(lambda x, y: x + y, data, [])

【讨论】:

    猜你喜欢
    • 2021-04-08
    • 2018-07-28
    • 2015-04-11
    • 2021-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 2023-03-20
    相关资源
    最近更新 更多