是否有可能分割字符串每n个字符?
例如,假设我有一个包含以下内容的字符串:
'1234567890'
我怎样才能让它看起来像这样:
['12','34','56','78','90']
关于列表的相同问题,请参见如何将列表分割为大小相等的块?。同样的技术通常适用,尽管有一些变化。
是否有可能分割字符串每n个字符?
例如,假设我有一个包含以下内容的字符串:
'1234567890'
我怎样才能让它看起来像这样:
['12','34','56','78','90']
关于列表的相同问题,请参见如何将列表分割为大小相等的块?。同样的技术通常适用,尽管有一些变化。
当前回答
试试下面的代码:
from itertools import islice
def split_every(n, iterable):
i = iter(iterable)
piece = list(islice(i, n))
while piece:
yield piece
piece = list(islice(i, n))
s = '1234567890'
print list(split_every(2, list(s)))
其他回答
>>> from functools import reduce
>>> from operator import add
>>> from itertools import izip
>>> x = iter('1234567890')
>>> [reduce(add, tup) for tup in izip(x, x)]
['12', '34', '56', '78', '90']
>>> x = iter('1234567890')
>>> [reduce(add, tup) for tup in izip(x, x, x)]
['123', '456', '789']
为了完整,你可以用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逐块生成。
我喜欢这个解决方案:
s = '1234567890'
o = []
while s:
o.append(s[:2])
s = s[2:]
另一个使用groupby和index//n作为键来分组字母的解决方案:
from itertools import groupby
text = "abcdefghij"
n = 3
result = []
for idx, chunk in groupby(text, key=lambda x: x.index//n):
result.append("".join(chunk))
# result = ['abc', 'def', 'ghi', 'j']
试试这个:
s='1234567890'
print([s[idx:idx+2] for idx,val in enumerate(s) if idx%2 == 0])
输出:
['12', '34', '56', '78', '90']