4

我有一个关于如何在不使用任何现有库的情况下确定 Python 中三个范围的重叠的问题:

例如,如果我有三个范围(10,20)(15,25)(18,30),我应该如何寻找它们之间的重叠?

我的答案应该是 (18,19,20)

任何帮助将非常感激。谢谢 !

4

2 回答 2

8

重叠从最高起点到最低终点:

ranges = [(10,20), (15,25), (18,30)]
starts, ends = zip(*ranges)
result = range(max(starts), min(ends) + 1)

测试:

>>> print(*result)
18 19 20
于 2012-05-25T22:03:28.930 回答
4

虽然WolframH 的答案是这种情况下的最佳答案,但可以使用更通用的解决方案来查找重叠,因为您无需担心重复元素,即使用集合及其intersection操作。

>>> set(range(10, 21)) & set(range(15, 26)) & set(range(18, 31))
{18, 19, 20}

或者,作为更通用的解决方案:

ranges = [(10, 20), (15, 25), (18, 30)]
set.intersection(*(set(range(start, finish+1)) for start, finish in ranges))
于 2012-05-25T22:13:07.837 回答