Itertools.accumulate查找区间的并集(从减少转换为累积)



我似乎开发了正确的reduce运算来寻找区间的并集,但却意识到reduce会给你一个最终结果。所以我查阅了文档,发现我应该使用的实际上是accumulate

我需要有人帮我把这个reduce转换成accumulate,这样我就有了中间间隔

下面的代码是我如何使用reduce的一个示例。我假设可以使用accumulate来存储中间值。我不确定这是否可能。。但我看了accumulate如何给你一个项目列表的例子,其中每个项目都是一个中间计算结果。

example_interval = [[1,3],[2,6],[6,10],[15,18]]
def main():
def function(item1, item2):

if item1[1] >= item2[0]:
return item1[0], max(item1[1], item2[1])
else:
return item2
return reduce(function, example_interval)

为了理解这个问题,[1, 3], [2, 6]可以被简化为[1, 6],因为item1[1] >= item2[0],然后[1, 6]被取为item1,然后与[6,10](即item2)进行比较,得到[1, 10]。然后将[1, 10]与最终项[15, 18]进行比较,在这种情况下,它不会被合并,因此最终结果是[1, 10], [15, 18]

我知道没有reduceaccumulate怎么做这个问题我只是想了解如何使用accumulate来复制存储中间值的任务

from itertools import accumulate
def function(item1, item2):
if item1[1] >= item2[0]:
return item1[0], max(item1[1], item2[1])
return item2
example_interval = [(1,3),(2,6),(6,10),(15,18)]
print(list(accumulate(example_interval, function)))

结果是:

[(1, 3), (1, 6), (1, 10), (15, 18)]

注意,我将example_interval上的项从列表更改为元组。如果不这样做,当item1[1] < item2[0]时,返回的值是item2它是一个列表对象,但如果是item[1] >= item2[0],则返回的表达式是item1[0], max(item1[1], item2[1]),它被转换为元组:

example_interval = [[1,3],[2,6],[6,10],[15,18]]
print(list(accumulate(example_interval, function)))

现在的输出是:

[[1, 3], (1, 6), (1, 10), [15, 18]]

相关内容

  • 没有找到相关文章

最新更新