list.reverse()不起作用

20

老实说,我真的不明白为什么这个程序返回的是None而不是一个翻转过后的列表:

>>> l = range(10)
>>> print l
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> print l.reverse()
None

为什么会发生这种情况?根据文档,我没有做错任何事。

4个回答

37

reverse会原地修改列表并返回None。如果你执行

l.reverse()
print l

您会看到您的列表已经被修改。


2
当然可以,但是为什么不直接返回列表呢,而是返回None?因为它只是一个引用而不是列表的副本,所以它不会太昂贵... - KasparJohannes

9

L.reverse()会直接修改L的值。通常情况下,在Python内置方法中,要么有副作用,要么有返回值,但不会同时具备。

倒序排列列表的常规方式是使用:

print L[::-1]

reversed(L) 返回一个 listreverseiterator 对象,适用于迭代,但如果你真的想要一个列表,那就不太好了。

[::-1] 只是一个正常切片 - 步长为-1,所以你得到一个从末尾开始到开头结束的副本。


6

list.reverse()会将列表就地反转。它不会返回反转后的列表。如果需要反转后的列表,请使用reversed()函数:

print reversed(l)

或者使用扩展的切片操作符:

print l[::-1]

4

文档说明:

list.reverse():原地(in place)反转列表中的元素。

原地意味着原始列表会被修改,而不是返回一个新列表,所以您要求它打印的返回值是None


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接