【发布时间】:2018-03-21 00:33:57
【问题描述】:
朋友们好,我想做一个手术,我相信我可以用地图解决这个问题。
以下操作实际上可以正常工作。但我想做点不一样的。
当它增加时,18 将是 19。但是当下一个值出现时,它现在将被收集到 19。
在这个例子中,我想要的输出是:
>> [18,18,18,19,19,21]
这是我能做的:
def sum(x):
return x+18
new_list = list(map(sum, [0,0,0,1,0,2]))
>> [18, 18, 18, 19, 18, 20]
【问题讨论】:
-
首先,将您的函数命名为
sum,并隐藏该名称的内置函数,这很令人困惑。 -
但同时,我认为你想要的是
accumulate,而不是map。您确实想添加一个起始值,但有两种简单的方法可以做到这一点:(1)在调用accumulate之前将起始值链接到输入,然后在输出中跳过它,或者(2)复制“大致等效于“文档中的代码并编写您自己的版本,该版本将起始值作为附加参数。 -
@abarnert:虽然
itertools.accumulate在这里不是一个选项,因为 OP 使用的是 2.7(accumulate是在 3.2 中添加的)。所以你需要使用map和一个有状态的映射函数(例如,一个实现__call__的类将保持运行总和)。 -
@ShadowRanger 或者您可以从 3.2 文档中复制
accumulate“大致等效”代码,该代码在 2.7 中有效。 (我被他明确调用list(map(…))所愚弄,这在 2.7 中毫无意义……)
标签: python arrays python-2.7