0

我想在 MS Office 或 OOo 打印对话框中创建 pyqt 小部件,它允许输入范围集,如"1, 3-4, 7-9". python 是否有用于将此类字符串转换为列表的内置工具或第三方包?例如:

"1, 3-4, 7-9" => [1,3,4,7,8,9]

ps:这个小部件是怎么调用的?

4

2 回答 2

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]
于 2013-06-05T09:16:20.160 回答
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'))

请记住,使用正则表达式检查此字符串是健康的。

于 2013-06-05T19:24:35.297 回答