将字符串拆分为2个字母的段

max*_*max 9 python string iterator python-3.x

我有一个字符串,我需要分成2个字母的部分.例如,'ABCDXY'应该成为['AB', 'CD', 'XY'].在奇数个字符的情况下的行为可以完全是任意的(我将提前检查长度).

没有丑陋的循环有没有办法做到这一点?

Emm*_*uel 21

>>> [s[i:i + 2] for i in range(0, len(s), 2)]
['AB', 'CD', 'XY']
Run Code Online (Sandbox Code Playgroud)

  • 他确实说过"没有丑陋的循环"......这当然避免了这种情况.:-) (4认同)
  • 那是一个循环。OP 说“没有循环” (2认同)

Inb*_*ose 16

使用正则表达式!

>>> import re
>>> s = "ABCDXYv"
>>> re.findall(r'.{1,2}',s,re.DOTALL)
['AB', 'CD', 'XY', 'v']
Run Code Online (Sandbox Code Playgroud)

我知道它已经有一段时间了,但我回到了这一点,并对哪种方法更好而感到好奇; 我的:r'.{1,2}'或乔恩的r'..?'.从表面上看,Jon看起来好多了,我认为它会比我快得多,但我很惊讶地发现,所以我想我会分享:

>>> import timeit
>>> timeit.Timer("re.findall(r'.{1,2}', 'ABCDXYv')", setup='import re').repeat()
[1.9064299485802252, 1.8369554649334674, 1.8548105833383772]
>>> timeit.Timer("re.findall(r'..?', 'ABCDXYv')", setup='import re').repeat()
[1.9142223469651611, 1.8670038395145383, 1.85781945659771]
Run Code Online (Sandbox Code Playgroud)

这表明确实r'.{1,2}'是更好/更快的选择.(但只是略微)