“List Reversing”python程序出错

时间:2013-02-20 06:57:24

标签: python list

大家好! 我是python编程的初学者。我正在编写一个python程序来反转给定的输入列表。以下是它的代码:

    L1=list(input("Enter the numbers of list to be reversed : "))
    L2=[]

    def rever(La,Lb):
     if len(Lb)==0: 
      return La                               
     else:
      return rever(La.append(Lb.pop(0)),Lb)

    print rever(L2,L1)

例如,如果我们输入,

    1,2,3

输出应为,

    [3,2,1]

但这不会发生。 Python发出以下错误:

    Traceback (most recent call last):
      File "Q3.py", line 10, in <module>
        print rever(L2,L1)
      File "Q3.py", line 8, in rever
        return rever(La.append(Lb.pop(0)),Lb)
      File "Q3.py", line 8, in rever
        return rever(La.append(Lb.pop(0)),Lb)
    AttributeError: 'NoneType' object has no attribute 'append'

我不明白。请帮帮我!!

3 个答案:

答案 0 :(得分:1)

可能你应该看看这个,而不是pop和追加

In [5]: L1=list(input("Enter the numbers of list to be reversed : "))
Enter the numbers of list to be reversed : 1,2,3,4,5

In [6]: L1
Out[6]: [1, 2, 3, 4, 5]

In [7]: L2 = L1[::-1]

In [8]: L2
Out[8]: [5, 4, 3, 2, 1]

答案 1 :(得分:1)

有几个问题。首先是工作方式:

def rever(La,Lb):
    if len(Lb)==0: 
        return La
    else:
        La.append(Lb.pop())
        return rever(La,Lb)

list.append附加到位,意味着它返回None。由于您在递归中将La.append作为参数传递,因此在第二次迭代时会出现错误。

如果你想这样做那么你可以做

return rever(La + [Lb.pop()], Lb)

第二个问题是你正在弹出并附加。所以你会得到同样的订单。相反,弹出结尾(没有参数弹出)并追加。

答案 2 :(得分:0)

append方法就地运行,更改原始列表并返回None,从而为您提供错误。试试这个:

def rever(La, Lb):
    if len(Lb) == 0:
        return La
    else:
        La.append(Lb.pop())
        return rever(La, Lb)

您还可以将代码重构为以下内容:

def rever(La, Lb):
    if Lb:
        La.append(Lb.pop())
        return rever(La, Lb)
    return La

这使用布尔上下文中空列表为False的事实,并且任何函数只能有一个返回值。