1

每个人!我是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'

我不明白。请帮帮我!!

4

3 回答 3

1

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

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]
于 2013-02-20T07:00:32.123 回答
1

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

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

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

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

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

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

于 2013-02-20T07:06:22.077 回答
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,并且任何函数只能有一个返回值。

于 2013-02-20T07:08:37.330 回答