Sve*_*ach 15
s = "2,5,7-9,12"
ranges = (x.split("-") for x in s.split(","))
print [i for r in ranges for i in range(int(r[0]), int(r[-1]) + 1)]
Run Code Online (Sandbox Code Playgroud)
版画
[2, 5, 7, 8, 9, 12]
Run Code Online (Sandbox Code Playgroud)
小智 5
s = "2,5,7-9,12"
result = list()
for item in s.split(','):
if '-' in item:
x,y = item.split('-')
result.extend(range(int(x), int(y)+1))
else:
result.append(int(item))
print result
Run Code Online (Sandbox Code Playgroud)
此版本处理任意空白、重叠范围、无序范围和负整数:
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]
Run Code Online (Sandbox Code Playgroud)