Let’s say, (7, 10)
and (11, 13)
result into (7, 13)
:
a = [(7, 10), (11, 13), (11, 15), (14, 20), (23, 39)]
b = []
for begin,end in sorted(a):
if b and b[-1][1] >= begin - 1:
b[-1] = (b[-1][0], end)
else:
b.append((begin, end))
b
is now
[(7, 20), (23, 39)]
EDIT:
As @CentAu correctly notices, [(2,4), (1,6)]
would return (1,4)
instead of (1,6)
. Here is the new version with correct handling of this case:
a = [(7, 10), (11, 13), (11, 15), (14, 20), (23, 39)]
b = []
for begin,end in sorted(a):
if b and b[-1][1] >= begin - 1:
b[-1][1] = max(b[-1][1], end)
else:
b.append([begin, end])