parse string of integer sets with intervals to list

后端 未结 6 2050
南旧
南旧 2021-02-09 13:47

I have \"2,5,7-9,12\" string.

I want to get [2, 5, 7, 8, 9, 12] list from it.

Is there any built-in function for it in python?

Thanks.

6条回答
  •  清歌不尽
    2021-02-09 14:11

    This version handles arbitrary whitespace, overlapping ranges, out-of-order ranges, and negative integers:

    from itertools import chain
    
    def group_to_range(group):
      group = ''.join(group.split())
      sign, g = ('-', group[1:]) if group.startswith('-') else ('', group)
      r = g.split('-', 1)
      r[0] = sign + r[0]
      r = sorted(int(__) for __ in r)
      return range(r[0], 1 + r[-1])
    
    def rangeexpand(txt):
      ranges = chain.from_iterable(group_to_range(__) for __ in txt.split(','))
      return sorted(set(ranges))
    
    
    >>> rangeexpand('-6,-3--1,3-5,7-11,14,15,17-20')
    [-6, -3, -2, -1, 3, 4, 5, 7, 8, 9, 10, 11, 14, 15, 17, 18, 19, 20]
    >>> rangeexpand('1-4,6,3-2, 11, 8 - 12,5,14-14')
    [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 14]
    

提交回复
热议问题