我正在处理作业问题,并且函数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)
时,我收到一个错误:unorderable types:list()&lt; = int()。值列表中的值是整数,因此我不理解为什么在调用reduction
时map应该遍历整数列表时出现此错误。
谢谢!
答案 0 :(得分:2)
错误消息告诉你(&#34; unorderable类型:list()&lt; = int()&#34;),python不能命令列表和int。在某个时间点Sub StartTime()
nr = ThisWorkbook.Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUP).Row + 1
Cells(nr, 1) = Time
End Sub
已调用,reduction()
为n
,list
为COMPRESSED_BLOCK_SIZE
。如果您不知道为什么或发生这种情况,请尝试输入一些打印语句,以查看正在调用的int
及其返回的内容:
reduction()
答案 1 :(得分: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 []
c = count(S)
values = [c] + compress(S[c:])
red_vals = sum(map(reduction, values), [])
return red_vals