为什么列表反转返回空?

1 投票
3 回答
3981 浏览
提问于 2025-04-18 08:15

我有一个这样的示例列表:

l = [1,2,3]

print(l.reverse())
#give None instead [3, 2, 1]

这是什么情况呢?我该怎么把这个列表反转过来呢?

3 个回答

2

Python 不是一种函数式编程语言,它是命令式的。当你调用 list.reverse() 方法时,你实际上是在 改变原来的列表

l = [1,2,3]
l.reverse()
print l
# prints [3, 2, 1]

返回 None 的方法就像 C/C++/Java 里的 void 函数/方法。因为 list.reverse() 是在改变原来的列表,所以它没有什么有意义的东西可以返回,因此返回值是 None

正如 @YS-L 在评论中提到的,你可以使用 Python 的列表切片语法来创建一个反转后的列表副本

l = [1,2,3]
print l[::-1]
# prints [3, 2, 1]
4

来自文档:

list.reverse()

这个方法会把列表里的元素顺序反转,直接在原来的列表上操作。

你可能注意到,像 insertremovesort 这些只修改列表的方法,它们不会返回任何值,打印出来的都是默认的 None。这是Python中所有可变数据结构的设计原则。

8

我该如何反转一个列表呢?

这个列表确实被反转了。但是,list.reverse 是在原地反转的,也就是说它不会返回任何东西给调用者。你可以在调用 reverse 之后打印这个列表来验证这一点:

>>> l = [1,2,3]
>>> l.reverse()
>>> print(l)
>>> [3, 2, 1]

如果你还有疑问,可以使用帮助文档:

>>> help(list.reverse)

Help on method_descriptor:
reverse(...)
    L.reverse() -- reverse *IN PLACE*

(Python 2.7 的文档)

撰写回答