Вопрос-Ответ

Split string every nth character

Разделять строку на каждый n-й символ

Как мне разделить строку через каждый n-й символ?

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

Аналогичный вопрос со списком см. в разделе Как мне разбить список на куски одинакового размера?.

Переведено автоматически
Ответ 1
>>> line = '1234567890'
>>> n = 2
>>> [line[i:i+n] for i in range(0, len(line), n)]
['12', '34', '56', '78', '90']
Ответ 2

Для полноты картины вы можете сделать это с помощью регулярного выражения:

>>> 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, если строка длинная, для генерации фрагмента за фрагментом.

Ответ 3

Для этого в Python уже есть встроенная функция.

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

Это то, что написано в docstring для wrap:

>>> 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.
'''

Ответ 4

Еще один распространенный способ группировки элементов в группы длиной n:

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

Этот метод взят прямо из документации для zip().

python string