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,我們可以檢查其長度并將其附加到結果中。
添加回答
舉報