Is there something existing in python that can convert an increasing list of integers into a range list
E.g. given the set {0, 1, 2, 3, 4, 7, 8, 9, 11} I want to get
As there hasn't been a new answer for 2 years or so, here's one for zombie lovers!
If you don't want to use itertools or a generator, the following uses logic(!). It uses a set (cf. the question!) for input an returns a list of proper ranges as a result; it's easy enough to adjust the code to suit though.
def ranges(l_set: set) ->list:
rb_set = sorted(l_set - {i +1 for i in l_set})
re_set = sorted(l_set - {i -1 for i in l_set})
return [range(rb_set[i], re_set[i]+1) for i in range(len(rb_set))]
For example:
>>>ranges({6, 9, 10, 7, 8, 2, 3, 14})
[range(2, 4), range(6, 11), range(14, 15)]
>>>ranges({6, 7, 3, 15, 8, 5, 12, 0, 12, 7, 15, 6, 14, 8, 16})
[range(0, 1), range(3, 4), range(5, 9), range(12, 13), range(14, 17)]