2014-09-26 1 views
0

이상의 문자열 이상입니다 제가하고 싶은 것은이 같은 문자열을 가지고있다 문자열 :분할 문자열 다음에 그들을 결합은 각각의 문자열은 기본적으로 다음

-o 
-o-pp 
-o-pp-gg 
-o-pp-gg-s 
-o-pp-gg-s-h 

내가 그 출력 ('-'.join(lst))을 생산하기 위해 문자열을 연결하는 루프를 가진 문자열 (str.split('-'))를 분할하여이 작업을 수행 할 수 있다는 것을 알고있다. 그러나, 파이썬에서 이것을하는 더 우아한 방법이 있습니까?

답변

3

목록 이해하기!

s = "-o-pp-gg-s-h" 
ss = s.split("-") 
series = ["-".join(ss[:x]) for x in range(2,len(ss)+1)] 

충분히 우아합니까? 사용 만 다양한

+0

아주 좋은, 감사합니다. –

1
>>> s='-o-pp-gg-s-h' 
>>> nlist=s.split('-') 
>>> for i in range(len(nlist)): 
... print '-'.join(nlist[:i]) 
... 


-o 
-o-pp 
-o-pp-gg 
-o-pp-gg-s 
>>> 
1
>>> a 
'-o-pp-gg-s-h' 
>>> b=a.split('-') 

>>> b 
['', 'o', 'pp', 'gg', 's', 'h'] 
>>> for i in range(len(b)+1): 
...  print '-'.join(b[0:i]) 


-o 
-o-pp 
-o-pp-gg 
-o-pp-gg-s 
-o-pp-gg-s-h 
1

, accumulate (현대 파이썬) :

In [23]: s = '-o-pp-gg-s-h' 

In [24]: from itertools import accumulate 

In [25]: list(accumulate(s.split('-'), lambda x,y: x+'-'+y))[1:] 
Out[25]: ['-o', '-o-pp', '-o-pp-gg', '-o-pp-gg-s', '-o-pp-gg-s-h']