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)
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}'
是更好/更快的选择.(但只是略微)