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