老实说,我真的不明白为什么这个程序返回的是None
而不是一个翻转过后的列表:
>>> l = range(10)
>>> print l
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> print l.reverse()
None
为什么会发生这种情况?根据文档,我没有做错任何事。
reverse
会原地修改列表并返回None
。如果你执行
l.reverse()
print l
您会看到您的列表已经被修改。
L.reverse()
会直接修改L的值。通常情况下,在Python内置方法中,要么有副作用,要么有返回值,但不会同时具备。
倒序排列列表的常规方式是使用:
print L[::-1]
reversed(L)
返回一个 listreverseiterator 对象
,适用于迭代,但如果你真的想要一个列表,那就不太好了。
[::-1]
只是一个正常切片 - 步长为-1
,所以你得到一个从末尾开始到开头结束的副本。
list.reverse()
会将列表就地反转。它不会返回反转后的列表。如果需要反转后的列表,请使用reversed()
函数:
print reversed(l)
或者使用扩展的切片操作符:
print l[::-1]
文档说明:
list.reverse():原地(in place)反转列表中的元素。
原地意味着原始列表会被修改,而不是返回一个新列表,所以您要求它打印的返回值是None
。
None
?因为它只是一个引用而不是列表的副本,所以它不会太昂贵... - KasparJohannes