【发布时间】:2016-06-21 20:15:21
【问题描述】:
我正在处理一个家庭作业问题,并且有一个函数compress(S),它接受一个二进制字符串。它调用另一个函数count(S),它返回字符串开头的连续数字的数量。它为整个字符串递归调用count(S),并创建一个连续位数的列表。例如,compress('111000111') 将返回 [3, 3, 3]。
然后调用另一个函数reduction(n),它接受int 并返回一个列表,其中没有一个数字大于设定值COMPRESSED_BLOCK_SIZE。如果必须拆分数字,它也与 0 交替出现。例如,reduction(5) 如果COMPRESSED_BLOCK_SIZE 为 2,则返回 [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) 函数使用 map 函数调用 reduction(values) 时,我得到一个错误:不可排序的类型:list() reduction 时遍历整数列表时会出现此错误。
谢谢!
【问题讨论】:
-
我正在使用内置的 map 函数对列表“values”中的每个 int 调用“reduction”。它在压缩函数中调用。
-
map(reduction, values)将返回reduction()为values中的每个元素运行的结果列表。这意味着您将拥有一个整数列表列表。您需要展平结果
标签: python recursion binary compression