展开一个字符串,该字符串描述作为数字和/或范围列表的一组数字

2024-05-16 20:23:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要解析一个描述一组数字的字符串。这些数字是按顺序列出的,但连续数字的范围可以用连字符/短划线缩写为“范围”。在

示例:“001,008-011,020

我想把这个字符串解释成一个有序列表:[ 1, 8, 9, 10, 11, 20 ]

可能有任意数量的范围和元素。在


Tags: 字符串元素示例数量顺序数字字符序列表
3条回答

你可以做如下的事情。。在

>>> def findval(str):
...     val = []
...     for x in str.split(','):
...         if '-' in x:
...            lnum, rnum = x.split('-')
...            lnum, rnum = int(lnum), int(rnum)
...            val.extend(range(lnum, rnum + 1))
...         else:
...            lnum = int(x)
...            val.append(lnum)
...     return val

>>> findval('001,008-011,020')
[1, 8, 9, 10, 11, 20]

^{}

关于:

def expand(s):
    parts = (map(int, x.split('-')) for x in s.split(','))
    return (n for p in parts for n in range(p[0], p[-1]+1))

之后呢

^{pr2}$

如果你知道字符串的格式是。。。在

x =  "001,008-011,020"

x = x.split(',') # Split at the commas

y = []

# Iterate over the list
for i in x:
    try:
        # Will append the integer to your output list
        y.append(int(i))
    except ValueError:
        # If you get a ValueError (from trying to int('008-011') for example)
        # then split the string at the hyphen and individually append
        # the integers in between.
        j = i.split('-')
        for k in range(int(j[0]), int(j[1])+1):
            y.append(k)

我认为这应该行得通,不过您可能需要检查try/except循环中是否会无意中捕获到其他ValueErrors。在

相关问题 更多 >