Python RLE压缩算法
我正在尝试运行这个简单的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
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"