def get_collapsed_ranges(ranges):
    ranges = iter(sorted(ranges))
current_range = next(ranges)
for start, end in ranges:
    if start > current_range[1]:
        yield current_range
current_range = [start, end]
Нахождение общей продолжительности в данных временных рядов без перекрытия