亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

符號的運行長度編碼

符號的運行長度編碼

慕的地8271018 2021-09-01 14:50:05
我正在嘗試使用 python 編寫運行長度編碼代碼。如果消息由長符號序列組成。我打算將其編碼為符號列表及其出現次數。這是我的代碼alphabets = ['a','b','c','d','e','f','g','h','i','j','k',             'l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']char_count = 0translate = ''words = input('Enter your word:  ')for char in words:    if char in alphabets:        char_count += 1        translate += char + str(char_count)print(translate)當我運行我的程序時,這就是我得到的。Enter your word:  abbbbaaabbaaaa1b2b3b4b5a6a7a8b9b10a11a12a13輸出實際上是應該的。a1b4a3b2a3有沒有辦法來解決這個問題?
查看完整描述

2 回答

?
胡子哥哥

TA貢獻1825條經驗 獲得超6個贊

您可以簡單地使用正則表達式來解決問題:


import re

translate = re.sub(r"((.)\2*)", lambda x: x.group(2) + str(len(x.group(1))), words)

此正則表達式查找words字符串中所有相似連續符號的組,并用其長度編碼替換它們。


查看完整回答
反對 回復 2021-09-01
?
繁華開滿天機

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


查看完整回答
反對 回復 2021-09-01
  • 2 回答
  • 0 關注
  • 218 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號