我试图在我的程序中添加一个选项,允许用户选择他想要做的程序的步骤。
我希望能够解析像"1-3,6,8-10"这样的字符串并获得[1, 2, 3, 6, 8, 9, 10]。
您知道Python中是否已经存在这样的东西了吗?
发布于 2013-09-12 08:57:22
这个函数按你的要求做。它假定没有使用负数,否则需要进行一些更改来支持这种情况。
def mixrange(s):
r = []
for i in s.split(','):
if '-' not in i:
r.append(int(i))
else:
l,h = map(int, i.split('-'))
r+= range(l,h+1)
return r
print mixrange('1-3,6,8-10')发布于 2013-09-12 09:39:21
一种使用列表理解的方法:
s = "1-3,6,8-10"
x = [ss.split('-') for ss in s.split(',')]
x = [range(int(i[0]),int(i[1])+1) if len(i) == 2 else i for i in x]
print([int(item) for sublist in x for item in sublist])产出:
[1, 2, 3, 6, 8, 9, 10]发布于 2013-09-12 09:45:13
没有内置功能,但可以使用xrange和生成器来完成:
from itertools import chain
s = "1-3,6,8-10"
spans = (el.partition('-')[::2] for el in s.split(','))
ranges = (xrange(int(s), int(e) + 1 if e else int(s) + 1) for s, e in spans)
all_nums = chain.from_iterable(ranges) # loop over, or materialse using `list`
# [1, 2, 3, 6, 8, 9, 10]https://stackoverflow.com/questions/18759512
复制相似问题