#python
#python
Вопрос:
не могли бы вы помочь мне разобраться в одном упражнении, которое относится к теме списков (глава 8 — https://www.py4e.com /)?
вот мой код:
def delete_head(t):
del t[0]
letters = ['a', 'b', 'c', 'd', 'f', 'g']
q = delete_head(letters)
print(q)
delete_head(letters)
print(letters)
Я получил этот вывод:
Я не могу понять, почему вывод не похож на [‘b’, ‘c’, ‘d’, ‘f’, ‘g’]
Комментарии:
1. Взгляните на PythonTutor для лучшего понимания того, что делает скрипт. Вы удаляете дважды. Кроме того, ваша функция ничего не возвращает, поэтому
print(q)
печатаетNone
.2. Ваша функция всегда удаляет первый элемент в списке «t[0]». Что именно вы хотите, чтобы это делало?
3. Я понял. Я дважды удалил заголовок списка. Спасибо, друзья
4. Всегда, когда вы запускаете эту функцию, вы удаляете первый символ вместо того
t
, на что ссылается ссылка. Не имеет смысла присваивать выходные данные переменной, если вы не указалиreturn
. Даже если вы вернетесьt
, вы увидите, чтоt is q
это равноTrue
. Чтобы явно создать копию, чтобы избежать такого поведения, введите:t.copy()
.
Ответ №1:
q = delete_head(letters)
Это удаляет ‘a’
delete_head(letters)
и это удаляет ‘b’ (поскольку ‘a’ уже нет)
Ответ №2:
Вы вызываете delete_head()
дважды, сначала в строке 4, где вы присваиваете возвращаемое значение функции q, и второй раз в строке 6.
Обратите внимание, что q равно None . Это потому, что ваша функция не возвращает список. Он получает ссылку на исходный список и удаляет первый элемент. Он не возвращает список, но изменения не теряются, потому что вы используете ссылку на исходный список. Поэтому возвращаемое значение delete_head()
равно None