首页 > 解决方案 > 我如何运行长度编码模式而不是字符?

问题描述

这是我当前的 RLE 代码

import re

def decode(string):
    if string == '':
        return ''
    multiplier = 1
    count = 0
    rle_decoding = []

    rle_encoding = []     
    rle_encoding = re.findall(r'[A-Za-z]|-?\d+\.\d+|\d+|[\w\s]', string) 
    for item in rle_encoding:
        if item.isdigit():
            multiplier = int(item)
        elif item.isalpha() or item.isspace():
            while count < multiplier:
                rle_decoding.append('{0}'.format(item))
                count += 1
            multiplier = 1
            count = 0 
    return(''.join(rle_decoding))
def encode(string):
    if string == '':
        return ''
    i = 0
    count = 0
    letter = string[i]
    rle = []
    while i <= len(string) - 1:        
        while string[i] == letter:
            i+= 1
            count +=1
            #catch the loop on last character so it doesn't got to top and access out of bounds
            if i > len(string) - 1:
                break
        if count == 1:
            rle.append('{0}'.format(letter))
        else:
            rle.append('{0}{1}'.format(count, letter))
        if i > len(string) - 1: #ugly that I have to do it twice
            break
        letter = string[i]
        count = 0

    final = ''.join(rle)
    return final

当我删除所有评论时,代码可能已经搞砸了,但当前的代码并不太重要。问题是,我在十六进制值上运行 RLE,这些值已全部转换为字母,因此 0-9 变为 gp。问题是有很多像'kjkjkjkjkjkjkjkjlmlmlmlmlmlmlmlm'这样的模式根本不压缩,因为它们不是单个字符。如果可能的话,我将如何运行我的程序以便它也编码模式?

标签: pythonpython-3.x

解决方案


推荐阅读