Tyl*_*ler 3 python reduce tuples python-3.x
我正在尝试编写一个函数,它将为我提供一个元组,其0索引是该文件中的行数,其1索引是该文件中的字符数.到目前为止,我有一个元组列表,如下所示:
mapped = [(1, 50), (1, 11), (1, 58)]
Run Code Online (Sandbox Code Playgroud)
我想写的这句话是这样的:
reduce(lambda x:(x[0]+y[0], x[1]+y[1]),(i for i in mapped))
Run Code Online (Sandbox Code Playgroud)
如果它正常工作,那么它应该返回(3,119)的元组.但是,我收到了错误
TypeError: reduce() of empty sequence with no initial value
Run Code Online (Sandbox Code Playgroud)
任何人都可以弄清楚为什么会这样吗?
Jac*_*CUI 10
没人回答为什么会有错误:
TypeError: reduce() of empty sequence with no initial value
当作为第二个参数的列表文字为空时,会发生错误.所以,如果你尝试
reduce(lambda x, y:(x[0]+y[0], x[1]+y[1]), [])
你会得到错误.
map(sum, ...) 更合身,看起来很漂亮。
map(sum, zip(*mapped))
Run Code Online (Sandbox Code Playgroud)
itertools.izip_longest如果列表的长度不同,则可以使用。
使用这种方式:
>>> 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)
Run Code Online (Sandbox Code Playgroud)
你错过的是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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13575 次 |
| 最近记录: |