为什么这不适用于Python?
>>> print [0,1,0,1,1,0,1,1,1,0,1,1,1,1,0].reverse()
None
我希望以相反的顺序返回列表。
答案 0 :(得分:52)
>>> a = [3, 4, 5]
>>> print a.reverse()
None
>>> a
[5, 4, 3]
>>>
这是因为reverse()
不返回列表,而是反转列表。因此,a.reverse()
的返回值为None
,显示在print
中。
答案 1 :(得分: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]
由于我还在尝试理解downvote,如果原始列表发生变化并不重要,请使用@taskinoor's answer,它会更快。
但是,如果您要求保持原始列表不变,建议您使用[::-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
答案 2 :(得分:22)
如果您想要反向复制列表,请使用reversed
:
>>> list(reversed([1,2,3,4]))
[4, 3, 2, 1]
P.S。 reversed
返回迭代器而不是列表的副本(如[][::1]
那样)。所以它适合你需要迭代反向迭代。此处的其他list()
仅用于演示。
答案 3 :(得分:3)
只是为了补充其他答案。别忘了:
>> reversed_iterator = reversed([0,1,0,1,1,0,1,1,1,0,1,1,1,1,0])
>> print list(reversed_iterator)
[0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0]
这样,如果需要这样,您的列表就会保持不变。
答案 4 :(得分:1)