为什么列表反转返回空?
我有一个这样的示例列表:
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
()这个方法会把列表里的元素顺序反转,直接在原来的列表上操作。
你可能注意到,像
insert
、remove
或sort
这些只修改列表的方法,它们不会返回任何值,打印出来的都是默认的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 的文档)