converting a list of integers into range in python

后端 未结 11 1409
爱一瞬间的悲伤
爱一瞬间的悲伤 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 08:13

    Using itertools.groupby() produces a concise but tricky implementation:

    import itertools
    
    def ranges(i):
        for a, b in itertools.groupby(enumerate(i), lambda pair: pair[1] - pair[0]):
            b = list(b)
            yield b[0][1], b[-1][1]
    
    print(list(ranges([0, 1, 2, 3, 4, 7, 8, 9, 11])))
    

    Output:

    [(0, 4), (7, 9), (11, 11)]
    

提交回复
热议问题