我目前正在编写一个函数,它将给我一个元组,它的0索引是该文件中的行数,其1索引是该文件中有多少个字符。到目前为止,我有一个元组列表,如下所示:
mapped = [(1, 50), (1, 11), (1, 58)]我想写的一句话是:
reduce(lambda x:(x[0]+y[0], x[1]+y[1]),(i for i in mapped))如果它工作正常,那么它应该返回一个元组(3,119)。但是,我得到了一个错误
TypeError: reduce() of empty sequence with no initial value有人能弄明白这是为什么吗?
发布于 2015-02-11 06:08:37
使用这种方式:
>>> reduce(lambda x,y:(x[0]+y[0], x[1]+y[1]),[i for i in mapped])
(3, 119)
>>> reduce(lambda x,y:(x[0]+y[0], x[1]+y[1]),(i for i in mapped))
(3, 119)您忽略的是,lambda应该采用两个参数,只需给出一个参数。
对于Python3.x,请参见下面的代码:
>>> from functools import reduce
>>> reduce(lambda x:(x[0]+y[0], x[1]+y[1]),(i for i in mapped))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: <lambda>() takes exactly 1 positional argument (2 given)
>>> reduce(lambda x,y:(x[0]+y[0], x[1]+y[1]),(i for i in mapped))
(3, 119)发布于 2018-01-10 05:55:56
没有人回答错误的原因:TypeError: reduce() of empty sequence with no initial value
当为第二个参数的列表文本为空时,将发生错误。所以如果你尝试reduce(lambda x, y:(x[0]+y[0], x[1]+y[1]), [])
你会得到错误的。
发布于 2015-02-11 06:17:06
https://stackoverflow.com/questions/28447538
复制相似问题