reverse()不适用于Python文字?

Ale*_*huk 18 python

为什么这不适用于Python?

>>> print [0,1,0,1,1,0,1,1,1,0,1,1,1,1,0].reverse() 
None
Run Code Online (Sandbox Code Playgroud)

我希望以相反的顺序取回列表.

tas*_*oor 52

>>> a = [3, 4, 5]
>>> print a.reverse()
None
>>> a
[5, 4, 3]
>>>
Run Code Online (Sandbox Code Playgroud)

这是因为reverse()不返回列表,而是反转列表.所以的返回值a.reverse()就是None它显示在print.

  • 是的,但已经在其他好的答案中解释了它们. (3认同)

Ber*_*ron 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]
Run Code Online (Sandbox Code Playgroud)

由于我仍然试图理解downvote,如果原始列表变得无关紧要,使用@ 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
Run Code Online (Sandbox Code Playgroud)

输出

2.44950699806
3.02573299408
Run Code Online (Sandbox Code Playgroud)

  • (这不是我,但是)你实际上没有解释OP的代码有什么问题. (4认同)
  • @katrielalex,taskinoor之前已经回答了这个问题.在我看来,添加多个答案的可能性不是多次同一个.此外,我不认为使用两种不同的措辞写同样的东西将被视为两个不同的答案.taskinoor的答案是正确的,我赞成它.我只是说了些不同的东西.这更像是提供OP期望的建议 (3认同)

Rom*_*huk 22

如果要反转列表副本,请使用reversed:

>>> list(reversed([1,2,3,4]))
[4, 3, 2, 1]
Run Code Online (Sandbox Code Playgroud)

ps reversed返回迭代器而不是列表的副本(如同[][::1]).所以它适合你需要迭代反向迭代.list()此处的附加仅用于演示.