首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python:将1,2,3-7,8,9,10变成字符串,如1,2,3,4,5,6,7,8,9,10所示

Python:将1,2,3-7,8,9,10变成字符串,如1,2,3,4,5,6,7,8,9,10所示
EN

Stack Overflow用户
提问于 2017-11-09 10:01:55
回答 5查看 207关注 0票数 2

我在靶场上做了很多工作,在这件事上我遇到了麻烦。我在试着把范围扩大到完整的数字列表。

代码语言:javascript
运行
复制
string = '1,2,3-6,10'
print string 

我希望打印字符串的结果是'1,2,3,4,5,6,10‘。所以基本地展示了整个范围。

因此,主要问题是如何使用python将3-6转化为3,4,5,6。

任何帮助都将不胜感激!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2017-11-09 10:07:43

我认为这会输出你所需要的,它有点长,但是演示了这个过程。

代码语言:javascript
运行
复制
string = '1,2,3-6,10'
splt_a = string.split(",")
o = []

for s in splt_a:
    if "-" in s:
        splt_b = s.split("-")
        for i in range(int(splt_b[0]), int(splt_b[1]) + 1):
            o.append(i)
    else:
        o.append(int(s))

print(o) # [1, 2, 3, 4, 5, 6, 10]
票数 1
EN

Stack Overflow用户

发布于 2017-11-09 10:07:22

您可以使用regex模式查找每个范围,并使用一个函数将范围替换为数字列表:

代码语言:javascript
运行
复制
import re
s = '1,2,3-6,10'

def replace_range_by_ints(m):
    a = m.group(1)
    b = m.group(2)
    return ','.join(str(i) for i in range(int(a), int(b) + 1))

pattern = re.compile('(\d+)\-(\d+)')
print(re.sub(pattern, replace_range_by_ints, s))
# 1,2,3,4,5,6,10
票数 5
EN

Stack Overflow用户

发布于 2017-11-09 10:11:11

如果检测到- (有边界固定),一行将创建一个范围,否则只会将其转换为整数:

代码语言:javascript
运行
复制
import itertools

result = [x for y in '-1,1,2,3-6,10'.split(",") for x in (range(int(y.split("-")[0]),int(y.split("-")[1])+1) if y.find("-")>0 else [int(y)]) ]

结果(作为整数列表):

代码语言:javascript
运行
复制
[-1, 1, 2, 3, 4, 5, 6, 10]

请注意,它也处理负数(y.find("-")>0确保-在检测范围时不处于起始位置),但不处理负范围(必须为此选择另一个分隔符,如:)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47198876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档