【发布时间】:2011-10-13 05:36:54
【问题描述】:
为什么这在 Python 中不起作用?
>>> print [0,1,0,1,1,0,1,1,1,0,1,1,1,1,0].reverse()
None
我希望以相反的顺序取回列表。
【问题讨论】:
标签: python
为什么这在 Python 中不起作用?
>>> print [0,1,0,1,1,0,1,1,1,0,1,1,1,1,0].reverse()
None
我希望以相反的顺序取回列表。
【问题讨论】:
标签: python
>>> a = [3, 4, 5]
>>> print a.reverse()
None
>>> a
[5, 4, 3]
>>>
这是因为reverse() 不返回列表,而是将列表反转到位。所以a.reverse()的返回值为None,如print所示。
【讨论】:
reversed()。)
如果你想让它以相反的顺序返回一个新列表,你可以使用[::-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'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
【讨论】:
reversed(),这是最直接的选项。 (不过,我也没有对你投反对票。)
如果您想要反向复制列表,请使用reversed:
>>> list(reversed([1,2,3,4]))
[4, 3, 2, 1]
附言reversed 返回一个迭代器而不是列表的副本(就像 [][::1] 所做的那样)。所以它是合适的,那么你需要遍历一个反向的可迭代对象。此处附加的list() 仅用于演示。
【讨论】:
只是为了补充其他答案。不要忘记:
>> 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]
如果这是一个要求,这样你的列表就不会改变。
【讨论】:
【讨论】: