运行长度解压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作为索引。

我相信你可以从这里完成。