Itertools.accumulate 求区间并集(从归约转换为累积)
Itertools.accumulate to find union of intervals (convert from reduce to 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]
.
我知道如何在没有 reduce
和 accumulate
的情况下做这道题。 我只是想了解如何使用 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]]
我似乎已经开发出正确的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]
.
我知道如何在没有 reduce
和 accumulate
的情况下做这道题。 我只是想了解如何使用 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]]