[python] n 번째 문자마다 문자열을 분할 하시겠습니까?

n 번째 문자마다 문자열을 분할 할 수 있습니까?

예를 들어, 다음을 포함하는 문자열이 있다고 가정하십시오.

'1234567890'

어떻게 이렇게 보일 수 있습니까?

['12','34','56','78','90']



답변

>>> line = '1234567890'
>>> n = 2
>>> [line[i:i+n] for i in range(0, len(line), n)]
['12', '34', '56', '78', '90']


답변

완료하기 위해 정규식 으로이 작업을 수행 할 수 있습니다.

>>> import re
>>> re.findall('..','1234567890')
['12', '34', '56', '78', '90']

홀수의 문자에 대해 다음을 수행 할 수 있습니다.

>>> import re
>>> re.findall('..?', '123456789')
['12', '34', '56', '78', '9']

긴 청크에 대한 정규식을 단순화하기 위해 다음을 수행 할 수도 있습니다.

>>> import re
>>> re.findall('.{1,2}', '123456789')
['12', '34', '56', '78', '9']

re.finditer문자열이 청크별로 청크를 생성하는 데 긴 경우 사용할 수 있습니다 .


답변

파이썬에는 이미 내장 함수가 있습니다.

>>> from textwrap import wrap
>>> s = '1234567890'
>>> wrap(s, 2)
['12', '34', '56', '78', '90']

이것이 랩의 docstring이 말하는 것입니다 :

>>> help(wrap)
'''
Help on function wrap in module textwrap:

wrap(text, width=70, **kwargs)
    Wrap a single paragraph of text, returning a list of wrapped lines.

    Reformat the single paragraph in 'text' so it fits in lines of no
    more than 'width' columns, and return a list of wrapped lines.  By
    default, tabs in 'text' are expanded with string.expandtabs(), and
    all other whitespace characters (including newline) are converted to
    space.  See TextWrapper class for available keyword args to customize
    wrapping behaviour.
'''


답변

요소를 n 길이 그룹으로 그룹화하는 또 다른 일반적인 방법은 다음과 같습니다.

>>> s = '1234567890'
>>> map(''.join, zip(*[iter(s)]*2))
['12', '34', '56', '78', '90']

이 방법은에 대한 문서에서 직접 제공됩니다 zip().


답변

itertools 버전보다 짧고 읽기 쉽다고 생각합니다.

def split_by_n(seq, n):
    '''A generator to divide a sequence into chunks of n units.'''
    while seq:
        yield seq[:n]
        seq = seq[n:]

print(list(split_by_n('1234567890', 2)))


답변

나는이 솔루션을 좋아한다 :

s = '1234567890'
o = []
while s:
    o.append(s[:2])
    s = s[2:]


답변

PyPI에서 더 많은 itertools 사용 :

>>> from more_itertools import sliced
>>> list(sliced('1234567890', 2))
['12', '34', '56', '78', '90']