2014-03-26 7 views
1

길이가 같은 항목으로 목록으로 분할해야하는 문자열이 있습니다 (공백없이). 나는 split() 메서드를 알고 있지만 멀리까지는 길이를 통하지 않고 공백을 통해서만 분할된다는 것을 알고 있습니다.동일한 길이의 항목이있는 목록으로 문자열 분할

이 같은 내가 뭘 할 수 있습니다 :

string = "abcdefghijklmnopqrstuvwx" 
string = string.Split(0 - 3) 
print(string) 

>>> ["abcd", "efgh", "ijkl", "mnop", "qrst", "uvwx"] 

나는이 목록을 통해 반복에 대해 생각하지만 간단한 해결책이 있다면 궁금 해서요?

+0

@ m.wasowski 반복기를 묻는 질문은 약간 씩 다릅니다. – EOL

답변

11
>>> [string[start:start+4] for start in xrange(0, len(string), 4)] 
['abcd', 'efgh', 'ijkl', 'mnop', 'qrst', 'uvwx'] 

마지막 조각이 4 자 미만인 경우에도 작동합니다.

+2

완벽하고 매력적입니다. 이제 답을 수락하기 위해 4 분 정도 기다려야합니다. –

+2

왜 downvote ?? – EOL

2

방법에 대해 :

>>> string = 'abcdefghijklmnopqrstuvwx' 
>>> map(''.join, zip(*[iter(string)]*4)) 
['abcd', 'efgh', 'ijkl', 'mnop', 'qrst', 'uvwx'] 
>>> 
+1

파이썬이 존재하는 방식을 좋아합니다. – stanleyxu2005

+0

귀엽고 낭비입니다. 문자열은 나중에 재구성되는 문자로 분해됩니다. 또한 문자열의 길이가 4의 배수가 아니면 마지막 문자를 선택하지 못합니다. – EOL

2

나 :

map(lambda i:string[i:i+4], xrange(0, len(string), 4)) 
+0

xrange가 좋습니다. 그러나지도 + 람다는 목록 이해보다 명백하게 명확하지 않습니다. – EOL

-1

textwrap 표준 라이브러리 모듈을 사용

>>> import textwrap 
>>> textwrap.wrap('abcdefghijklmnopq', 4) 
['abcd', 'efgh', 'ijkl', 'mnop', 'q'] 

편집 : 쓰레기,이 공백으로 잘 작동하지 않습니다. 지난 번 내가 문제가 있었기 때문에 대답을 남겨 두었습니다. 실제로 텍스트를 감싸려고 했으므로 다른 사람들도 똑같을 수 있습니다.

+0

"Hi! \ nOh! \ nAh!"에서 실패합니다. 사실,'textwrap.wrap()'는 단어를 포함하는 단락을 대상으로합니다. – EOL

+1

방금 ​​알아 챘습니다. 동정. – RemcoGerlich