reverse()在Python字面量上不起作用?
为什么这个在Python中不管用呢?
>>> print [0,1,0,1,1,0,1,1,1,0,1,1,1,1,0].reverse()
None
我本来想得到一个反向的列表。
5 个回答
22
如果你想要一个列表的反向副本,可以使用 reversed
:
>>> list(reversed([1,2,3,4]))
[4, 3, 2, 1]
另外,reversed
返回的是一个迭代器,而不是像 [][::1]
那样的列表副本。所以当你需要遍历一个反向的可迭代对象时,使用它会更合适。这里的 list()
只是用来演示的。
52
>>> a = [3, 4, 5]
>>> print a.reverse()
None
>>> a
[5, 4, 3]
>>>
这是因为 reverse()
这个方法并不会返回一个新的列表,而是直接在原来的列表上进行反转。所以当你调用 a.reverse()
时,它的返回值是 None
,这就是为什么在 print
中看到的是 None
。
23
如果你想要返回一个新的列表,并且这个列表是反向的,你可以使用 [::-1]
。
>>> [0,1,0,1,1,0,1,1,1,0,1,1,1,1,0][::-1]
[0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0]
我还在搞明白为什么会有人给这个投反对票,如果你不在乎原来的列表被改变,可以使用 @taskinoor的回答,这样会更快。
不过,如果你需要保持原来的列表不变,我建议你使用 [::-1]
。
from time import time
lst = [0,1,0,1,1,0,1,1,1,0,1,1,1,1,0]
s = time()
for i in xrange(5000000):
a = lst[::-1] # creates a reversed list
print time() -s
s = time()
for i in xrange(5000000):
b = lst[:] # copies the list
b.reverse() # reverses it
print time() -s
输出结果
2.44950699806
3.02573299408