我想创建像在MS Office或OOo打印对话框中一样的pyqt小工具,允许输入范围集,如"1, 3-4, 7-9"
。python是否有内置的工具或第三方包来将这些字符串转换为列表?例如:
"1, 3-4, 7-9" => [1,3,4,7,8,9]
ps:这个小部件是如何调用的?
发布于 2013-06-05 17:16:20
我不确定有没有内置的或者第三方的包可以用,但是像下面这样的东西应该可以做到:
from itertools import chain
def my_range(*args):
args = map(int,args)
if len(args) == 1:
return args
return range(args[0], args[1]+1)
def func(strs):
return list(chain.from_iterable(my_range(*x.split('-')) for x in strs.split(', ')))
strs = "1, 3-4, 7-9"
print func(strs)
#[1, 3, 4, 7, 8, 9]
发布于 2013-06-06 03:24:35
制作了我自己的不带itertools的版本。
def expander(inpt):
ret = []
for token in inpt.split(','):
if '-' in token:
a, b = token.strip().split('-')
ret.extend(range(int(a), int(b)+1))
else:
ret.append(int(token))
return ret
print(expander('1, 3-4, 7-9'))
请记住,使用regex检查此字符串将是健康的。
https://stackoverflow.com/questions/16935634
复制相似问题