[英]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.