简单的功能来反转列表

时间:2014-02-22 17:33:32

标签: python list recursion

使用+运算符可以正常工作。如果我尝试使用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]))

2 个答案:

答案 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
相关问题