繁体   English   中英

运行长度编码 Python

[英]Run Length Encoding Python

问题是:编写一个函数,该函数接受一个字符列表作为参数,并返回一个反映该列表运行长度编码的列表。 返回列表中的元素遵循以下模式:偶数索引包含字符,奇数索引包含字符连续重复的次数。

当我在函数中键入一个列表时,它不会遍历列表的整个长度。 它适用于较短长度的列表,但不适用于较长的列表。不确定如何修复它。

def runLengthEncoding(myList):
    aList=[]
    count=1
    for i in range(1,len(myList)):
        if myList[i] == myList[i-1]:
            count=count+1
        else:
            aList.append(myList[i-1])
            aList.append(count)
            count=1
            if i == (len(myList)-1):
                aList.append(myList[i])
                aList.append(count)
    return aList

当最后一项重复时,或者当列表的长度为 1 时,您的代码失败:

>>> runLengthEncoding("fooobar")
['f', 1, 'o', 3, 'b', 1, 'a', 1, 'r', 1]
>>> runLengthEncoding("fooobarr")
['f', 1, 'o', 3, 'b', 1, 'a', 1]
>>> runLengthEncoding("a")
[]

您的解决方案的解决方法是删除以if i == (len(myList)-1): ,并将它们替换为

if myList:
    aList.append(myList[-1])
    aList.append(count)

将该块移出循环。


但是,实现游程编码的最简单方法可能是使用 itertools 模块:

from itertools import chain, groupby

def run_length(iterable):
    return list(chain.from_iterable(
        (val, len([*thing]))
        for val, thing in groupby(iterable)
    ))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM