使用地图功能时,无法输出类型错误

时间:2016-03-08 02:45:45

标签: python recursion binary compression

我正在处理作业问题,并且函数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应该遍历整数列表时出现此错误。

谢谢!

2 个答案:

答案 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()nlistCOMPRESSED_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