是否有可能分割字符串每n个字符?
例如,假设我有一个包含以下内容的字符串:
'1234567890'
我怎样才能让它看起来像这样:
['12','34','56','78','90']
关于列表的相同问题,请参见如何将列表分割为大小相等的块?。同样的技术通常适用,尽管有一些变化。
是否有可能分割字符串每n个字符?
例如,假设我有一个包含以下内容的字符串:
'1234567890'
我怎样才能让它看起来像这样:
['12','34','56','78','90']
关于列表的相同问题,请参见如何将列表分割为大小相等的块?。同样的技术通常适用,尽管有一些变化。
当前回答
这可以通过一个简单的for循环来实现。
a = '1234567890a'
result = []
for i in range(0, len(a), 2):
result.append(a[i : i + 2])
print(result)
输出如下所示 ['12', '34', '56', '78', '90', 'a']
其他回答
为了完整,你可以用regex来完成:
>>> 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逐块生成。
使用PyPI中的更多itertools:
>>> from more_itertools import sliced
>>> list(sliced('1234567890', 2))
['12', '34', '56', '78', '90']
我陷入了同样的困境。
这招对我很管用:
x = "1234567890"
n = 2
my_list = []
for i in range(0, len(x), n):
my_list.append(x[i:i+n])
print(my_list)
输出:
['12', '34', '56', '78', '90']
一如既往,为那些喜欢一句俏皮话的人
n = 2
line = "this is a line split into n characters"
line = [line[i * n:i * n+n] for i,blah in enumerate(line[::n])]
短字符串的简单递归解决方案:
def split(s, n):
if len(s) < n:
return []
else:
return [s[:n]] + split(s[n:], n)
print(split('1234567890', 2))
或以这样的形式:
def split(s, n):
if len(s) < n:
return []
elif len(s) == n:
return [s]
else:
return split(s[:n], n) + split(s[n:], n)
,它更明确地说明了递归方法中的典型分治模式(尽管实际上没有必要这样做)。