Почему это не работает в Python?
>>> print [0,1,0,1,1,0,1,1,1,0,1,1,1,1,0].reverse()
None
Я ожидал вернуть список в обратном порядке.
Почему это не работает в Python?
>>> print [0,1,0,1,1,0,1,1,1,0,1,1,1,1,0].reverse()
None
Я ожидал вернуть список в обратном порядке.
Если вы хотите, чтобы он возвращал новый список в обратном порядке, вы можете использовать [::-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 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
>>> a = [3, 4, 5]
>>> print a.reverse()
None
>>> a
[5, 4, 3]
>>>
Это потому, что reverse()
не возвращает список, вместо этого он меняет список на место. Таким образом, возвращаемое значение a.reverse()
равно None
, которое показано в print
.
Если вы хотите перевернутую копию списка, используйте reversed
:
>>> list(reversed([1,2,3,4]))
[4, 3, 2, 1]
p.s. 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]
Таким образом, ваш список не изменится, если это требование.
reverse изменяет переменную списка, как показано здесь. list reverse
если вы напечатаете его после того, как вы его отменили, оно будет отображаться корректно
поэтому просто используйте переменную