Python 實現執行長度字串解碼迭代器類的程式
假設我們想要定義一個迭代器類,它使用執行長度編碼的小寫字串(例如 s)進行構造,這個迭代器有兩個函式:
- next():查詢迭代器中的下一個元素。
- hasnext():檢查下一個元素是否存在。
所以,如果輸入像 s = "2b1a",則使用 s 構造一個物件,然後呼叫 next()、hasnext()、next()、next()、hasnext(),那麼輸出將是 "b"、True、"b"、"a"、False。
為了解決這個問題,我們將遵循以下步驟:
- 定義一個建構函式。它將接收 s。
- output := 一個新的列表
- num := 空字串
- 對於 s 中的每個 i,執行以下操作:
- 如果 i 是字母,則:
- 將 num 插入到 output 的末尾。
- 將 i 插入到 output 的末尾。
- num := 空字串
- 否則:
- num := num + i
- 如果 i 是字母,則:
- 定義一個函式 next()。
- 如果 hasnext() 為真,則:
- count := output[0]
- letter := output[1]
- count := count - 1
- 如果 count > 0,則:
- output[0] := output[0] - 1
- 否則:
- output := output[從索引 2 到結尾]
- 返回 letter
- 定義一個函式 hasnext()。
- 如果 output 的大小不為 0,則:
- 返回 True
- 返回 False
示例
讓我們看看下面的實現來更好地理解:
class RunLengthIterator: def __init__(self, s): self.output = [] num = "" for i in s: if i.isalpha(): self.output.append(int(num)) self.output.append(i) num = "" else: num += i def next(self): if self.hasnext(): count = self.output[0] letter = self.output[1] count -= 1 if count > 0: self.output[0] -= 1 else: self.output = self.output[2:] return letter def hasnext(self): if len(self.output) != 0: return True return False s = "2b1a" obj = RunLengthIterator(s) print(obj.next()) print(obj.hasnext()) print(obj.next()) print(obj.next()) print(obj.hasnext())
輸入
"2b1a" obj = RunLengthIterator(s) obj.next() obj.hasnext() obj.next() obj.next() obj.hasnext()
輸出
b True b a False
廣告