您应该使用 2 元组而不是range
函数,因为range
返回一个list
. 这是一个简单的函数,如果可能的话,它将结合你的两个 2 元组:
def combine_bounds(x, y):
a, b = sorted([x, y])
if a[1]+1 >= b[0]:
return (a[0], max(a[1],b[1]))
样本输出:
>>> combine_bounds((1,2), (3,4))
(1, 4)
>>> combine_bounds((1,100), (3,4))
(1, 100)
>>> combine_bounds((1,2), (4,10))
>>> combine_bounds((1,3), (4,10))
(1, 10)
>>> combine_bounds((1,6), (4,10))
(1, 10)
>>> combine_bounds((10,600), (4,10))
(4, 600)
>>> combine_bounds((11,600), (4,10))
(4, 600)
>>> combine_bounds((9,600), (4,10))
(4, 600)
>>> combine_bounds((1,600), (4,10))
(1, 600)
>>> combine_bounds((12,600), (4,10))
>>> combine_bounds((12,600), (4,10)) is None
True
None
在 Python 中是一个错误值,因此您可以使用combine_bounds
条件中的结果。如果它返回None
(类似于False
),则没有交集。如果它返回一个 2 元组,那么就有一个交集,返回值就是结果。
我没有为你做所有的工作(你仍然需要弄清楚如何在输入上使用它来获得你想要的输出),但这应该会让你朝着正确的方向前进!