converting a list of integers into range in python

后端 未结 11 1378
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-11-28 07:35

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

11条回答
  •  失恋的感觉
    2020-11-28 07:54

    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)]
    

提交回复
热议问题