我想在MS Office或OOo打印对话框中创建pyqt小部件,允许输入像"1, 3-4, 7-9"
这样的范围集。 python是否有内置工具或第三方软件包将这些字符串转换为列表?例如:
"1, 3-4, 7-9" => [1,3,4,7,8,9]
ps:这个小部件如何调用?
答案 0 :(得分:1)
不确定是否有可用的内置或第三方软件包,但是这样的事情应该这样做:
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]
答案 1 :(得分:0)
制作我自己的版本,没有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'))
请记住,使用正则表达式检查此字符串是健康的。