用Python解码数字?

2024-09-30 16:38:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我解码有问题。 首先,字符串'44444'被编码为'54'。(5乘4) 现在,当我想解码'54'时,它是空的。 (它与字母一起工作)

该算法将字符串'4a3b2c'解码为'aaaabbbcc'。 现在,当我想解码'4a54'时,它只给出'aaaa',但正确的解码是'aaaa44444'。我怎样才能破译这个

代码如下:

def decode_RLE(x):
    decode = ''
    count = ''
    for i in x:
        
        if i.isdigit():
            #append to count
            count += i
        else i: 
   
            decode += i * int(count)
            count = '' 
         
    return decode

Tags: 字符串代码in算法编码fordefcount
3条回答

按照您的逻辑,您只需要一位数的长度。如果是这样,您可以这样迭代:

def decode_rle(x):
    decoded = ''
    iter_x = iter(x)
    for n, c in zip(iter_x, iter_x):
        decoded += c * int(n)
    return decoded

但对于两位数或更多位数的长度,这是行不通的

您可以尝试string multiplication

def decode(string):
    output = ''
    for i in range(0, len(string), 2):
        output += int(string[i]) * string[i + 1]
    return output

print(decode("54"))
print(decode("4a54"))

输出:

44444
aaaa44444

您甚至可以使用列表:

def decode(s):
    return ''.join(int(s[i]) * s[i + 1] for i in range(0, len(s), 2))

这是由于第一个if条件。循环结束后,您将获得count=“54”和decode=”“。然后,函数返回一个空字符串

如果输入只有两位数字,从技术上讲,循环是不必要的。请尝试以下代码:

def decode_RLE(x):
    return int(x[0])*x[1]

如果输入有两个以上的数字,循环和良好的老式切片应该可以工作:

def decode_RLE(x):
    counts = x[0:len(x):2] #get odd digits
    chars = x[1:len(x):2] #get even digits
    decode = ""
    
    i = 0
    for ch in chars:
        decode += int(counts[i])*chars[i]
        i += 1
    
    return decode

相关问题 更多 >