大家好! 我是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'
我不明白。请帮帮我!!
答案 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
的事实,并且任何函数只能有一个返回值。