Работа со строками Python с использованием xrange - PullRequest
1 голос
/ 24 марта 2011

Что является более быстрым способом манипулирования строкой myInput, чтобы иметь myOutput строку?

Ответы [ 3 ]

1 голос
/ 24 марта 2011
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 голос
/ 24 марта 2011
>>> 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 голос
/ 24 марта 2011

я помню вопрос о SO, который превратил [1,3,4,5,7] в "1,3-5,7", но я не помню, какой

это противоположная проблема:

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")

печать:

1,3,4,5,7
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...