RLE压缩算法

2024-06-15 08:29:42 发布

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

我试着运行这个简单的RLERun Length Encoding压缩算法。我有什么选择可以返回结果?在

def decode(text_decode):
    decoded_text = ""
    length = len(text_decode)
    if length == 0:
        decoded_text = ""
    elif length == 1:
        decoded_text = text_decode
    else:
        i = 1
        while i < length:
            next_block =""
            for j in range(0, int(text_decode[i])):
                next_block += text_decode[i - 1]
            decoded_text += next_block
            i += 2
    return decoded_text

Tags: textlenifdefblocklengthelseencoding
2条回答

您还没有充分描述压缩文本的格式,所以我通过查看您的代码并将其与在web上搜索到的相关实现进行比较来猜测。在

下面是两个似乎可以协同工作的函数:

def encode(input_string):
    """ Simple run-length encoder.

    Modified version of code at http://rosettacode.org/wiki/Run-length_encoding#Python
    """
    count = 1
    prev = ''
    lst = []
    for character in input_string:
        if character != prev:
            if prev:
                entry = (prev,count)
                lst.append(entry)
            count = 1
            prev = character
        else:
            count += 1
    else:
        entry = (character,count)
        lst.append(entry)
    return ''.join(chr(cnt)+ch for (ch, cnt) in lst)

def decode(encoded_text):
    """ Simple run-length decoder. """
    chars = []
    a = iter(encoded_text)
    for (cnt, ch) in zip(a, a):
        chars.append(ch * ord(cnt))
    return ''.join(chars)

word = "aaaaahhhhhhmmmmmmmuiiiiiiiaaaaaa"
rle_text = encode(word)
print(len(word))  # -> 32
print(len(rle_text)) # -> 12
print(decode(rle_text))  # -> "aaaaahhhhhhmmmmmmmuiiiiiiiaaaaaa"

像这样,你可以应用你的算法并运行它。 您也可以选择要“转换”的文本

texte = raw_input("Your text to compress: ")
text_rle = decoded(texte)
print(text_rle)

相关问题 更多 >