问题提出:编写一个函数,该函数接受一个字符列表作为参数,并返回一个反映该列表的游程长度编码的列表。返回列表中的元素遵循以下模式:偶数索引包含字符,而奇数索引包含字符连续重复的次数。
当我在函数中键入列表时,它不会遍历列表的整个长度。它适用于长度较短的列表,但不适用于较长的列表。不确定如何修复它。
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)
))
关于python - 游程编码Python,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46572023/