展开一个看起来像"1-3,6,8-10"到[1,2,3,6,8,9,10]的范围

tak*_*004 5 python

我正在尝试为我的程序添加一个选项,允许用户选择他想要执行的程序的哪些步骤.

我希望能够解析一个像"1-3,6,8-10"和得到 的字符串[1, 2, 3, 6, 8, 9, 10].

你知道Python中的某些内容是否存在吗?

LtW*_*orf 9

这个功能可以满足您的要求.它假设没有使用负数,否则需要一些更改来支持这种情况.

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')
Run Code Online (Sandbox Code Playgroud)


Chr*_*our 5

使用列表推导式的一种方法:

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])
Run Code Online (Sandbox Code Playgroud)

输出:

[1, 2, 3, 6, 8, 9, 10]
Run Code Online (Sandbox Code Playgroud)