Pythonic way to convert a list of integers into a string of comma-separated ranges

后端 未结 7 823
感情败类
感情败类 2020-12-01 05:06

I have a list of integers which I need to parse into a string of ranges.

For example:

 [0, 1, 2, 3] -> \"0-3\"
 [0, 1, 2, 4, 8] -> \"0-2,4,8\"
         


        
7条回答
  •  孤街浪徒
    2020-12-01 05:24

    def createRangeString(zones):
        """Create a string with integer ranges in the format of '%d-%d'
        >>> createRangeString([0, 1, 2, 4, 8])
        "0-2,4,8"
        >>> createRangeString([1,2,3,4,6,7,8,9,12,13,19,20,22,22,22,23,40,44])
        "1-4,6-9,12-13,19-20,22-23,40,44"
        """
        buffer = []
    
        try:
            st = ed = zones[0]
            for i in zones[1:]:
                delta = i - ed
                if delta == 1: ed = i
                elif not (delta == 0):
                    buffer.append((st, ed))
                    st = ed = i
            else: buffer.append((st, ed))
        except IndexError:
            pass
    
        return ','.join(
                "%d" % st if st==ed else "%d-%d" % (st, ed)
                for st, ed in buffer)
    

提交回复
热议问题