使用+
运算符可以正常工作。如果我尝试使用append
方法进行编写,则会返回None
。
可以revFromEnd2
使用append
方法反转列表吗?
def revFromEnd(L):
if len(L)==1:
return L
else:
return [L[-1]] + revFromEnd(L[:-1])
def revFromEnd2(L):
if len(L)==1:
return L
else:
return [L[-1]].append(revFromEnd2(L[:-1]))
print(revFromEnd([1,2,3,4,5]))
print()
print(revFromEnd2([1,2,3,4,5]))
答案 0 :(得分:4)
内置函数reversed
:
>>> l = [1, 2, 3]
>>> list(reversed(l))
[3, 2, 1]
你也可以使用切片(它们的语法是[start:end:step],所以如果你为step定义一个负值,它会在相反的方向上形成一个切片):
>>> l = [1, 2, 3]
>>> l[::-1]
[3, 2, 1]
UPD:是的,递归很棒,但由于你使用的是Python和it doesn't optimize tail recursion,所以最好使用更明显的方法:)
答案 1 :(得分:2)
list.append
将一个项目附加到列表中,不返回任何内容(=返回None
),这与返回新列表连接两个列表的+
运算符不同:
>>> [1, 2] + [3]
[1, 2, 3]
>>> [1, 2].append(3) # => None
>>>
顺便说一下,考虑到list.extend
返回recvFromEnd1/2
,您最好使用list
:
>>> lst = [1,2]
>>> lst.append([3,4])
>>> lst
[1, 2, [3, 4]] # <--- Is this what you want?
>>> lst = [1,2]
>>> lst.extend([3,4])
>>> lst
[1, 2, 3, 4]
def revFromEnd2(L):
if len(L)==1:
return L
else:
ret = [L[-1]]
ret.extend(revFromEnd2(L[:-1]))
return ret