Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python RLE压缩算法_Python_Compression - Fatal编程技术网

Python RLE压缩算法

Python RLE压缩算法,python,compression,Python,Compression,我正在尝试运行这个简单的RLE压缩算法。返回结果的选项有哪些 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

我正在尝试运行这个简单的RLE压缩算法。返回结果的选项有哪些

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
def解码(文本解码):
解码的_text=“”
长度=len(文本解码)
如果长度==0:
解码的_text=“”
elif长度==1:
解码文本=文本解码
其他:
i=1
而我<长度:
next_block=“”
对于范围(0,int(text_decode[i])内的j:
下一个\u块+=文本\u解码[i-1]
解码的\u文本+=下一个\u块
i+=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"

您能澄清一下这是什么意思吗?请描述压缩数据是如何存储在
text\u decode
中的(或者您的问题并添加执行此操作的代码)。
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"