我有一个问题,关于如何在不使用任何现有库的情况下确定Python中三个范围的重叠:
例如,如果我有三个范围为(10,20)(15,25)(18,30),我该如何找到它们之间的重叠?
我的回答应该是(18,19,20)
非常感谢任何帮助。谢谢 !
答案 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}