反转lis的简单函数

2024-04-24 22:24:47 发布

您现在位置:Python中文网/ 问答频道 /正文

使用+操作符可以很好地工作。如果我尝试使用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]))

Tags: 方法none列表lenreturnifdefelse
2条回答

有一个内置函数reversed

>>> l = [1, 2, 3]
>>> list(reversed(l))
[3, 2, 1]

您也可以使用切片(它们的语法是[开始:结束:step],因此,如果为step定义负值,它将在相反方向生成一个切片):

>>> l = [1, 2, 3]
>>> l[::-1]
[3, 2, 1]

UPD:是的,递归非常好,但是既然您使用的是Python和it doesn't optimize tail recursion,那么最好使用更明显的方法:)

list.append将项附加到列表中,并且不返回任何内容(=returnNone),这与返回连接两个列表的新列表的+运算符不同:

>>> [1, 2] + [3]
[1, 2, 3]
>>> [1, 2].append(3) # => None
>>>

顺便说一句,考虑到recvFromEnd1/2返回list,您最好使用list.extend

>>> 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

相关问题 更多 >