2015-06-10 2 views
4

Я использовал два разных способа создания обратного списка.
Первый способ:Использование функции reverse() в Python

>>> a=list(range(3)) 
>>> a.reverse() 
>>> print(a) 
[2,1,0] 

Второй способ:

>>> a=list(range(3)).reverse() 
>>> print(a) 
None 

Почему второй способ не работает Спасибо за любую помощь?.

ответ

6

Это терпит неудачу, потому что reverse изменяет список на месте (т.е. не создает новый список) и, как и большинство функций, которые работают на месте он возвращает None.

В первом примере

a=list(range(3)) 
a.reverse() 
print a 

Он отлично работает, как вы захватить a в качестве возвращаемого значения из list(range(3)), который возвращает list. Затем вы меняете этот список и печатаете его. Все в порядке!

В вашем втором примере

a=list(range(3)).reverse() 
print(a) 

a равно возвращаемому значению reverse() (не list(range(3))). reverse вызывается во временном списке и возвращает None, то есть значение, присвоенное a.

3

Почему второй способ не работает?

.reverse() не возвращает список (он возвращает None). Он изменяет аргумент, который вы передаете в него.

Вы должны сделать это так же, как в первом способе:

a=list(range(3)) 
a.reverse() 
print(a) 
+0

Вы имеете в виду обратное()? Reverse(), похоже, не существует. – Ren

+1

он должен быть 'a.reverse()' - исправлен. –

2

Потому что .reverse() мутирует список, но не возвращает список.

Почему они решили реализовать его таким образом, я не знаю. Возможно, чтобы сохранить память.

+4

https://mail.python.org/pipermail/python-dev/2003-October/038855.html - объяснение Guido, почему 'sort',' reverse' методы 'list' не возвращают' self' – Alik

+0

Это ответы вопрос о том, почему он не возвращает ценности - у Гвидо есть эстетическое возражение против свободного кодирования, - но он не отвечает, почему он находится в функциональном стиле. Почему '.reverse()' возвращает обратный массив и оставляет исходный неизменным? – Malvolio

+0

Не могли бы вы подробнее рассказать о своем последнем вопросе? – Alik

Смежные вопросы