是否有可能分割字符串每n个字符?
例如,假设我有一个包含以下内容的字符串:
'1234567890'
我怎样才能让它看起来像这样:
['12','34','56','78','90']
关于列表的相同问题,请参见如何将列表分割为大小相等的块?。同样的技术通常适用,尽管有一些变化。
是否有可能分割字符串每n个字符?
例如,假设我有一个包含以下内容的字符串:
'1234567890'
我怎样才能让它看起来像这样:
['12','34','56','78','90']
关于列表的相同问题,请参见如何将列表分割为大小相等的块?。同样的技术通常适用,尽管有一些变化。
当前回答
另一个使用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']
其他回答
另一个使用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']
使用PyPI中的更多itertools:
>>> from more_itertools import sliced
>>> list(sliced('1234567890', 2))
['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])]
使用groupby的解决方案:
from itertools import groupby, chain, repeat, cycle
text = "wwworldggggreattecchemggpwwwzaz"
n = 3
c = cycle(chain(repeat(0, n), repeat(1, n)))
res = ["".join(g) for _, g in groupby(text, lambda x: next(c))]
print(res)
输出:
['www', 'orl', 'dgg', 'ggr', 'eat', 'tec', 'che', 'mgg', 'pww', 'wza', 'z']
这可以通过一个简单的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']