我有格式为 "1-3 6:10-11 7-9" 的字符串,我想根据它们创建数字集,如下所示 {1,2,3, 6,10,11,7,8,9}。
为了从数字范围创建集合,我有以下代码:
def create_set(src):
lset = []
if len(src) > 0:
pos = src.find('-')
if pos != -1:
first = int(src[:pos])
last = int(src[pos+1:])
else:
return [int(src)] # Only one number
for j in range (first, last+1):
lset.append(j)
return set(lset)
但我不知道如何正确处理出现在字符串中的“:”。有人可以帮助我吗?
提前致谢!
编辑:顺便说一句,是否有更紧凑的方法来解析此类字符串,也许使用正则表达式?
请您参考如下方法:
这样的东西可能对你有用:
s = '1-3 6:10-11 7-9'
s = s.replace(':', ' ')
lset = set()
fs = s.split()
for f in fs:
r = f.split('-')
if len(r)==1:
# add a single number
lset.add(int(r[0]))
else:
# add a range of numbers (inclusive of the endpoints)
lset |= set(range(int(r[0]), int(r[1])+1))
print(lset)
