【问题标题】:Recursively reverse a list python throws error递归反转列表python抛出错误
【发布时间】:2019-11-18 19:20:13
【问题描述】:

我想了解为什么代码 1 会抛出以下错误 "AttributeError: 'NoneType' 对象没有属性 'append'"

  1. def reverse(s):
        if len(s) == 1:
            return list(s)
        else:
            return reverse(s[1:]).append(s[0])
    

如果“s”是一个字符串,同样的逻辑也可以工作

2

s="hello"
def reverse(s): 
    if len(s) == 1: 
        return s 
    else: 
        return reverse(s[1:]) + s[0] 

谁能帮我理解这个?

【问题讨论】:

    标签: python-3.x string recursion reverse


    【解决方案1】:

    您正在返回一个附加语句,它返回一个 None 而不是列表。

    print(a.append('o'))
    

    这将打印一个None

    将您的代码更改为:

    s = ["h", "e", "l", "l", "o"]
    def reverse(s):
        if len(s) == 1:
            return s
        else:
            ret = reverse(s[1:])    # 'ret' needs to be returned
            ret.append(s[0])        # here 'ret' is updated but append returns a 'None'
            return ret              # returning the updated 'ret'
    

    【讨论】:

      【解决方案2】:

      在第一段代码中,您将获取一个字符串列表,删除第一个元素并将其附加到最后。因此,您将一个字符串附加到一个列表中,创建一个无类型。代码的最小更改是将字符串转换为字符串列表:

      s = ["h", "e", "l", "l", "o"]
      def reverse(s):
          if len(s) == 1:
              return s
          else:
              return reverse(s[1:]) + list(s[0])
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-19
        • 2020-05-11
        • 2014-02-19
        • 2014-04-13
        • 1970-01-01
        • 2022-08-12
        相关资源
        最近更新 更多