如何在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]
祝一切顺利
我想进行 运行 长度编码,但出于某种原因使用递归方式,但我不知道如何将我的代码从循环转换为递归。这是为了 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]
祝一切顺利