from typing import NamedTuple, List class Range(NamedTuple): start: int length: int def from_indexes(indexes: List[int]) -> List[Range]: ranges = [] curr_range_start = 0 curr_range_len = 0 last_index = -1 for index in sorted(indexes): if index == curr_range_start + curr_range_len: curr_range_len += 1 else: if curr_range_len > 0: ranges.append(Range( start = curr_range_start, length = curr_range_len)) curr_range_start = index curr_range_len = 1 if curr_range_len > 0: ranges.append(Range( start = curr_range_start, length = curr_range_len)) return ranges