Python - 确定3个范围的重叠

时间:2012-05-25 21:57:37

标签: python range overlap

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

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

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

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

2 个答案:

答案 0 :(得分:8)

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

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

测试:

>>> print(*result)
18 19 20

答案 1 :(得分:4)

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

intersection

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

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