2 回答
TA贡献1825条经验 获得超6个赞
您可以简单地使用正则表达式来解决问题:
import re
translate = re.sub(r"((.)\2*)", lambda x: x.group(2) + str(len(x.group(1))), words)
此正则表达式查找words字符串中所有相似连续符号的组,并用其长度编码替换它们。
TA贡献1816条经验 获得超4个赞
一种可能的方法是使用itertools.groupby:
from itertools import groupby
''.join([f'{letter}{len(list(grouper))}' for letter, grouper in groupby(words)])
解释
itertools.groupby将字符串拆分为相同字母的块,将每个块转换为一对(letter, grouper)并返回生成这些对的对象:
>>> groupby('abbbbaaabbaaa')
<itertools.groupby at 0x6fffeafa098>
>>> for chunk in groupby('abbbbaaabbaaa'):
print(chunk)
('a', <itertools._grouper object at 0x6fffeaf2cf8>)
('b', <itertools._grouper object at 0x6fffeae9908>)
('a', <itertools._grouper object at 0x6fffeae9898>)
('b', <itertools._grouper object at 0x6fffeaf2320>)
('a', <itertools._grouper object at 0x6fffeae9898>)
每个itertools._grouper对象又是一个生成器,它生成相应块中的所有字母。通过将其转换为 a list,我们可以检查其长度并将其附加到结果中。
添加回答
举报