如何在Python递归方式中使用运行长度编码

How to use Run Length Encoding in Python the recursive ways

我想进行 运行 长度编码,但出于某种原因使用递归方式,但我不知道如何将我的代码从循环转换为递归。这是为了 python。这是一个循环,我真的很想让它递归。

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

我期待 runLengthEncoding("AAAAAAABBBCEZ") 的答案 ['A', 7, 'B', 3, 'C', 1, 'E', 1, 'Z', 1]。就像上一个代码的答案一样。但我只想将代码更改为递归方式。

内置函数呢?

from collections import Counter


letter_counter = Counter(list("AAAAAAABBBCEZ"))
print(dict(letter_counter))

结果是 {'A': 7, 'B': 3, 'C': 1, 'E': 1, 'Z': 1}

你最好将结果放入字典中。您可以使用 str.count() 来计算字符串中 "char" 的数量。代码如下:

data = "AAAAAAABBBCEZ"

# delet the duplicated characters in data
chrs = ''
chrs = [chrs + x for x in data if x not in chrs]

res = {chr: data.count(chr) for chr in chrs}

print(res)

输出

{'A': 7, 'B': 3, 'C': 1, 'E': 1, 'Z': 1}

这可以通过其他方法轻松解决,但由于您对递归解决方案和最后的列表形式很挑剔,所以这是我的解决方案。

String = "AAAAAAABBBCEZ"

Global_List = []
StartWord = String[0]
Count = 0
def RecursiveLength(String):
    global Global_List
    global StartWord
    global Count
    if len(String)==0:
        Global_List.append(StartWord)
        Global_List.append(Count)
        return
    else:
        if String[0] == StartWord:
            Count += 1
            String = String[1:]
            return RecursiveLength(String)
        else:
            Global_List.append(StartWord)
            Global_List.append(Count)
            StartWord = String[0]
            Count = 1
            String = String[1:]
            return RecursiveLength(String)         



RecursiveLength(String)
print(Global_List)

这给了我以下输出。然而,有比递归更好的方法来解决这个问题。

['A', 7, 'B', 3, 'C', 1, 'E', 1, 'Z', 1]

祝一切顺利