首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用xrange操作Python字符串

使用xrange操作Python字符串
EN

Stack Overflow用户
提问于 2011-03-24 22:17:06
回答 3查看 463关注 0票数 1

为了得到myOutput字符串,操作myInput字符串的更快方法是什么?

代码语言:javascript
复制
myInput  = "1,3-5,7"

myOutput = "1,3,4,5,7"
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-24 22:30:12

代码语言:javascript
复制
re.sub( 
      "(\d+)-(\d+)" ,        
      lambda x : ",".join( map( str , range( int(x.group(1)) , int( x.group(2) ) +1 ) )) , 
      "1,3-5,7" )

你可以得到"1,3,4,5,7“

票数 1
EN

Stack Overflow用户

发布于 2011-03-24 22:28:18

我记得上面的一个问题,把1,3,4,5,7变成了"1,3-5,7“,但我不记得是哪个了

这是相反的问题:

代码语言:javascript
复制
def expand(s): 
    return ','.join(sum([v if len(v)==1 else map(str, apply(lambda a,b: range(a,b+1), map(int, v))) for v in [p.split('-') for p in s.split(',')]],[]))

print expand("1,3-5,7")

打印:

代码语言:javascript
复制
1,3,4,5,7
票数 1
EN

Stack Overflow用户

发布于 2011-03-24 22:31:54

代码语言:javascript
复制
>>> def expand(s):
...   for p in s.split(","):
...     r = p.split("-")
...     if len(r) == 1:
...       yield str(r[0])
...     else:
...       for i in range(int(r[0]), int(r[1]) + 1):
...         yield str(i)
... 
>>> ",".join(expand("1,3-5,7"))
'1,3,4,5,7'
>>> ",".join(expand("1-5,8,10,13-19"))
'1,2,3,4,5,8,10,13,14,15,16,17,18,19'

显然,如果输入不符合假设(字母、反向序列等),这将以各种有趣的方式失败,并且不适用于负数。

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

https://stackoverflow.com/questions/5420535

复制
相关文章

相似问题

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