运行长度解压python
Run length decompression python
我正在尝试制作一个不使用 1 的 运行 长度解码器。例如,可以传递的字符串类似于 ''' A2C3GTA'''。我做了我认为可行的事情,但很难找到我哪里出错了。我是 python 的初学者,所以很抱歉这个简单的问题。谢谢!
def decode(compressed):
decoded= ""
count = 0
for x in compressed :
if x.isdigit():
count += int(x)
y = compressed
decoded += y[int(x)+1] * count
count = 0
else :
decoded += x
print (decoded)
当您找到数字-字母对时,展开该对后未能跳过该字母。这是因为您使用了 for
循环,这是一个比您的逻辑想要的更具限制性的结构。相反,尝试:
idx = 0
while idx < len(compressed):
char = compressed[idx]
if char.isdigit():
# replicate next character
idx += 2
else:
decoded += char
idx += 1
这将处理您的迭代。
你在适当的复制中,输出中的 22
,这是由于对位置的错误引用:
decoded += y[int(x)+1] * count
这里,x
是运行长度,不是字符的位置。如果输入是 A7B
,这个格式错误的表达式会因为索引越界而出错。
在我上面给你的代码中,干脆继续使用idx
作为索引。
我相信你可以从这里完成。
我正在尝试制作一个不使用 1 的 运行 长度解码器。例如,可以传递的字符串类似于 ''' A2C3GTA'''。我做了我认为可行的事情,但很难找到我哪里出错了。我是 python 的初学者,所以很抱歉这个简单的问题。谢谢!
def decode(compressed):
decoded= ""
count = 0
for x in compressed :
if x.isdigit():
count += int(x)
y = compressed
decoded += y[int(x)+1] * count
count = 0
else :
decoded += x
print (decoded)
当您找到数字-字母对时,展开该对后未能跳过该字母。这是因为您使用了 for
循环,这是一个比您的逻辑想要的更具限制性的结构。相反,尝试:
idx = 0
while idx < len(compressed):
char = compressed[idx]
if char.isdigit():
# replicate next character
idx += 2
else:
decoded += char
idx += 1
这将处理您的迭代。
你在适当的复制中,输出中的 22
,这是由于对位置的错误引用:
decoded += y[int(x)+1] * count
这里,x
是运行长度,不是字符的位置。如果输入是 A7B
,这个格式错误的表达式会因为索引越界而出错。
在我上面给你的代码中,干脆继续使用idx
作为索引。
我相信你可以从这里完成。