将字符串拆分为偶数大小的块

Tea*_*One 14 python string tuples

我将如何能够采取像一个字符串'aaaaaaaaaaaaaaaaaaaaaaa' ,并将其分成4个长度元组像(aaaa,aaaa,aaaa)

Ash*_*ary 23

用途textwrap.wrap:

>>> import textwrap
>>> s = 'aaaaaaaaaaaaaaaaaaaaaaa'
>>> textwrap.wrap(s, 4)
['aaaa', 'aaaa', 'aaaa', 'aaaa', 'aaaa', 'aaa']
Run Code Online (Sandbox Code Playgroud)

  • 如果字符串包含空格,这会失败吗? (4认同)

fal*_*tru 12

使用列表理解,生成器表达式:

>>> s = 'aaaaaaaaaaaaaaaaaaaaaaa'
>>> [s[i:i+4] for i in range(0, len(s), 4)]
['aaaa', 'aaaa', 'aaaa', 'aaaa', 'aaaa', 'aaa']

>>> tuple(s[i:i+4] for i in range(0, len(s), 4))
('aaaa', 'aaaa', 'aaaa', 'aaaa', 'aaaa', 'aaa')

>>> s = 'a bcdefghi j'
>>> tuple(s[i:i+4] for i in range(0, len(s), 4))
('a bc', 'defg', 'hi j')
Run Code Online (Sandbox Code Playgroud)


Jam*_*pam 6

使用正则表达式的另一种解决方案:

>>> s = 'aaaaaaaaaaaaaaaaaaaaaaa'
>>> import re
>>> re.findall('[a-z]{4}', s)
['aaaa', 'aaaa', 'aaaa', 'aaaa', 'aaaa']
>>>
Run Code Online (Sandbox Code Playgroud)

  • 正则表达式对此有点矫枉过正。 (6认同)

unu*_*tbu 5

你可以使用石斑鱼食谱zip(*[iter(s)]*4)

\n\n
In [113]: s = \'aaaaaaaaaaaaaaaaaaaaaaa\'\n\nIn [114]: [\'\'.join(item) for item in zip(*[iter(s)]*4)]\nOut[114]: [\'aaaa\', \'aaaa\', \'aaaa\', \'aaaa\', \'aaaa\']\n
Run Code Online (Sandbox Code Playgroud)\n\n

请注意,如果字符串包含空格,则textwrap.wrap可能不会拆分为长度为 4 的字符串:s

\n\n
In [43]: textwrap.wrap(\'I am a hat\', 4)\nOut[43]: [\'I am\', \'a\', \'hat\']\n
Run Code Online (Sandbox Code Playgroud)\n\n

石斑鱼食谱比使用更快textwrap

\n\n
In [115]: import textwrap\n\nIn [116]: %timeit [\'\'.join(item) for item in zip(*[iter(s)]*4)]\n100000 loops, best of 3: 2.41 \xc2\xb5s per loop\n\nIn [117]: %timeit textwrap.wrap(s, 4)\n10000 loops, best of 3: 32.5 \xc2\xb5s per loop\n
Run Code Online (Sandbox Code Playgroud)\n\n

石斑鱼配方可以与任何迭代器一起使用,但textwrap只能与字符串一起使用。

\n