我正在處理作業問題,並且有一個函數compress(S)
,它使用二進制字符串。它調用另一個函數,count(S)
,它返回字符串開頭的連續數字的位數。它遞歸地調用count(S)
作爲整個字符串,並創建連續數字的列表。例如,compress('111000111')
會返回[3,3,3]。使用地圖功能時出現無法編輯的類型錯誤
然後調用另一個函數reduction(n)
,它接受int
並返回一個列表,其中沒有一個數字大於設置值COMPRESSED_BLOCK_SIZE
。如果數字必須分開,它也與0交替。例如,如果COMPRESSED_BLOCK_SIZE
爲2,則reduction(5)
返回[2,0,2,0,1]。
這是我的代碼。
def count(S):
if len(S) == 1:
return 1
if S[0] == S[1]:
return 1 + count(S[1:])
return 1
def reduction(n):
if n <= COMPRESSED_BLOCK_SIZE:
return [n]
return [COMPRESSED_BLOCK_SIZE] + [0] + reduction(n-COMPRESSED_BLOCK_SIZE)
def compress(S):
if S == '':
return []
values = [count(S)] + compress(S[count(S):])
red_vals = list(map(reduction, values))
return red_vals
還原功能正在工作,但是當compress(S)
功能使用地圖函數調用reduction(values)
,我得到一個錯誤:unorderable類型:列表()< = INT()。值列表中的值是整數,所以我不明白爲什麼我會在調用reduction
時出現此錯誤,如果映射應該遍歷整數列表。
謝謝!
我正在使用內置的map函數在列表'values'中對每個int調用'reduction'。它在壓縮函數中被調用。 –
'map(reduction,values)'將返回'values'中每個元素的'reduction()'結果列表。這意味着你將有一個整數列表的列表。你需要把結果弄平 –