我有一个关于如何在不使用任何现有库的情况下确定 Python 中三个范围的重叠的问题:
例如,如果我有三个范围(10,20)(15,25)(18,30),我应该如何寻找它们之间的重叠?
我的答案应该是 (18,19,20)
任何帮助将非常感激。谢谢 !
重叠从最高起点到最低终点:
ranges = [(10,20), (15,25), (18,30)]
starts, ends = zip(*ranges)
result = range(max(starts), min(ends) + 1)
测试:
>>> print(*result)
18 19 20
虽然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))