Python a = a.reverse делает список пустым?

1

В интерпретаторе

a = [1,2,3,4]
a = a.reverse()

Затем, когда я набираю a в интерпретаторе, я ничего не получаю. Таким образом, кажется, что a = a.reverse() генерирует пустой список. Это по дизайну?

Я использую python 2.5 для windows xp.

Теги:

7 ответов

16
Лучший ответ

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]
4

reverse изменяет список на месте и ничего не возвращает. Таким образом, это ожидаемое использование:

a = [1, 2, 3, 4]
a.reverse()
a       # => [4, 3, 2, 1]

Если вы присвойте результат reverse back to a, вы перезапишите всю свою тяжелую работу с помощью бессмысленного возвращаемого значения (None), из которого исходит ваша ошибка.

1

list является изменяемым типом, поэтому операции list выполняются на месте и возвращают None.

1

Встроенный метод reverse списка на python не возвращает обратный список.

Он меняет список на место.

Итак, если вы хотите изменить свой список, как в своем коде, просто выполните:

a = [1,2,3,4]
a.reverse()
0

Я думаю, что вы хотите сделать:

a = [1,2,3,4]
a.reverse()

a - это объект, и операции над ним выполняются, поэтому вам не нужно снова назначать его.

0

Обратный метод делает обратное "на месте" (вроде sort) и возвращает None, поэтому после вызова a.reverse() a уже содержит результат.

0

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]

Ещё вопросы

Сообщество Overcoder
Наверх
Меню