【问题标题】:Unorderable types error when using map function使用 map 函数时出现不可排序的类型错误
【发布时间】: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


【解决方案1】:

错误信息告诉你(“不可排序的类型:list() reduction() 被调用并且nlistCOMPRESSED_BLOCK_SIZEint。如果您看不到发生这种情况的原因或位置,请尝试输入一些打印语句以查看调用 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

【讨论】:

    【解决方案2】:

    有一些问题。这应该可以解决大多数问题:

    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
    

    【讨论】:

      猜你喜欢
      • 2017-04-11
      • 2019-12-18
      • 2016-07-14
      • 2018-10-29
      • 1970-01-01
      • 2019-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多