在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() 为 true,则
- 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
“`