我正在处理家庭作业问题,并且有一个采用二进制字符串的函数compress(S)
。它调用另一个函数count(S)
,该函数返回字符串开头的连续位数。它递归调用整个字符串的count(S)
,并创建一个连续位数的列表。例如,compress('111000111')
将返回[3,3,3]。
然后调用另一个函数reduction(n)
,该函数接受int
并返回一个列表,其中所有数字均不大于设置值COMPRESSED_BLOCK_SIZE
。如果必须分割数字,则它也以0交替。例如,如果reduction(5)
为2,则COMPRESSED_BLOCK_SIZE
返回[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应该迭代整数列表,为什么会出现此错误。谢谢!
最佳答案
错误消息告诉您(“无序类型:list()reduction(),而n
是list
,而COMPRESSED_BLOCK_SIZE
是int
。如果您看不到发生这种情况的原因或原因,请尝试输入一些打印语句以查看reduction()
被调用的内容以及返回的内容:
def reduction(n):
print(n)
if n <= COMPRESSED_BLOCK_SIZE:
retval = [n]
else:
retval = [COMPRESSED_BLOCK_SIZE] + [0] + reduction(n - COMPRESSED_BLOCK_SIZE)
print(retval)
return retval