В интерпретаторе
a = [1,2,3,4]
a = a.reverse()
Затем, когда я набираю a в интерпретаторе, я ничего не получаю. Таким образом, кажется, что a = a.reverse() генерирует пустой список. Это по дизайну?
Я использую python 2.5 для windows xp.
list.reverse() изменяет список на месте, возвращает None. Но если вы хотите защитить старый список, вы можете использовать функцию reverse() для этого, он возвращает итератор.
In [1]: a=[1,2,3,4]
In [2]: print(a.reverse())
None
In [3]: a
Out[3]: [4, 3, 2, 1]
In [4]: a=[1,2,3,4]
In [5]: print(reversed(a))
<listreverseiterator object at 0x24e7e50>
In [6]: list(reversed(a))
Out[6]: [4, 3, 2, 1]
In [7]: a
Out[7]: [1, 2, 3, 4]
reverse
изменяет список на месте и ничего не возвращает. Таким образом, это ожидаемое использование:
a = [1, 2, 3, 4]
a.reverse()
a # => [4, 3, 2, 1]
Если вы присвойте результат reverse
back to a
, вы перезапишите всю свою тяжелую работу с помощью бессмысленного возвращаемого значения (None
), из которого исходит ваша ошибка.
list
является изменяемым типом, поэтому операции list
выполняются на месте и возвращают None
.
Встроенный метод reverse
списка на python не возвращает обратный список.
Он меняет список на место.
Итак, если вы хотите изменить свой список, как в своем коде, просто выполните:
a = [1,2,3,4]
a.reverse()
Я думаю, что вы хотите сделать:
a = [1,2,3,4]
a.reverse()
a
- это объект, и операции над ним выполняются, поэтому вам не нужно снова назначать его.
Обратный метод делает обратное "на месте" (вроде sort) и возвращает None, поэтому после вызова a.reverse()
a
уже содержит результат.
list.reverse()
просто ничего не возвращает, потому что он меняет список на месте. См. Этот пример:
>>> a = [1,2,3,4]
>>> a.reverse()
>>> a
[4, 3, 2, 1]
Также существует функция reversed
(фактически тип, но здесь неважно), которая не меняет список на месте, а вместо этого возвращает итератор со списком в обратном порядке. Попробуйте:
>>> a = [1,2,3,4]
>>> a = list(reversed(a))
>>> a
[4, 3, 2, 1]