#python #list #global-variables #reverse #local-variables
#python #Список #глобальные переменные #обратный #локальные переменные
Вопрос:
Я тестирую обратную функцию. Мой код выглядит следующим образом:
def deep_reverse(L):
new_list = []
for element in L:
new_list = [element[::-1]]
L = new_list[::-1]
L = [[1, 2], [3, 4], [5, 6, 7]]
deep_reverse(L)
print(L)
Я ожидаю, что мой вывод L может быть таким [[7, 6, 5], [4, 3], [2, 1]], но это работает только внутри моей функции.
Я не смог изменить его в глобальной переменной. Как я могу это сделать? Спасибо
Ответ №1:
L
это просто локальная переменная, и назначение ей нового объекта не изменит исходный список; все, что он делает, это указывает имя L
в функции на другой объект. См. Отличное объяснение Неда Батчелдера об именах Python.
Вы можете заменить все элементы в L
ссылках на список, присвоив [:]
вместо этого фрагменту идентификатора:
L[:] = new_list[::-1]
Однако изменяемые последовательности, такие как списки, имеют list.reverse()
метод, поэтому вы можете просто изменить список на месте с помощью этого:
L.reverse()
Сделайте то же самое для каждого подсписка:
def deep_reverse(L):
""" assumes L is a list of lists whose elements are ints
Mutates L such that it reverses its elements and also
reverses the order of the int elements in every element of L.
It does not return anything.
"""
for element in L:
element.reverse()
L.reverse()
Комментарии:
1. Большое вам спасибо. Мне очень помогает ваше объяснение!