Python
Append в Python: как добавить элемент в список и не поймать None
append() — это метод списка, который добавляет один новый элемент в конец существующего списка. Он не создает новый список, а меняет тот список, на котором был вызван, поэтому нормальный код выглядит так: сначала есть список, потом вы вызываете items.append(value), после этого в списке появляется новый элемент
items = ["хлеб", "молоко"]
items.append("сыр")
print(items)
Вывод
['хлеб', 'молоко', 'сыр']
Как работает append()
Метод вызывается через точку после имени списка. В скобках пишется то, что нужно добавить: строка, число, словарь, другой список, объект — что угодно. Python не проверяет, «похоже» ли новое значение на остальные элементы, поэтому технически в один список можно положить и числа, и строки, но в нормальном коде лучше держать элементы одного смысла
numbers = [1, 2, 3]
numbers.append(4)
print(numbers)
Вывод
[1, 2, 3, 4]
Если вы добавляете список, он добавится как один элемент, а не «раскроется» внутри старого списка
numbers = [1, 2, 3]
numbers.append([4, 5])
print(numbers)
Вывод
[1, 2, 3, [4, 5]]
Главная ошибка: items = items.append(x)
Новички часто пишут так
items = ["хлеб", "молоко"]
items = items.append("сыр")
print(items)
Вывод будет таким
None
Это происходит потому, что append() меняет список на месте и возвращает None. Метод уже сделал свою работу, поэтому присваивать результат обратно в переменную не нужно. Правильный вариант проще и короче
items = ["хлеб", "молоко"]
items.append("сыр")
print(items)
append() и extend(): в чем разница
append() добавляет один объект целиком. extend() добавляет элементы из другого перебираемого объекта по одному. Это различие особенно видно на списках: если использовать append(), вложенный список станет одним элементом, а если использовать extend(), его элементы попадут в общий список
first = [1, 2]
first.append([3, 4])
print(first)
second = [1, 2]
second.extend([3, 4])
print(second)
Вывод
[1, 2, [3, 4]]
[1, 2, 3, 4]
Если хотите добавить один элемент — append(). Если хотите добавить все элементы из другого списка — extend()
append() в цикле
Частый сценарий: мы создаем пустой список, проходим циклом по данным и добавляем подходящие элементы. Например, соберем квадраты чисел от 1 до 5
squares = []
for number in range(1, 6):
squares.append(number ** 2)
print(squares)
Вывод
[1, 4, 9, 16, 25]
Такой код хорошо подходит для обучения, потому что видно весь процесс: пустой список, цикл, расчет нового значения, добавление через append()
Когда лучше list comprehension
Когда логика простая, список можно собрать короче через list comprehension
squares = [number ** 2 for number in range(1, 6)]
print(squares)
Это тот же результат, но запись компактнее. Для новичка я бы сначала разобрал вариант с append(), а потом уже показывал comprehension: так понятнее, откуда берется каждый элемент
Мини-задача
Есть список оценок. Нужно собрать только хорошие оценки — 4 и 5
grades = [5, 3, 4, 2, 5, 4, 3]
good_grades = []
for grade in grades:
if grade >= 4:
good_grades.append(grade)
print(good_grades)
Ожидаемый вывод
[5, 4, 5, 4]
Здесь append() используется не просто ради синтаксиса, а как рабочий инструмент фильтрации: мы просматриваем исходные данные и складываем в новый список только то, что подходит под условие
Частые ошибки
AttributeError: ‘str’ object has no attribute ‘append’
Вы пытаетесь вызвать append() у строки, а не у списка. У строк такого метода нет, потому что строки в Python неизменяемые. Если нужно собрать символы или слова, сначала заведите список, добавляйте в него элементы, а потом при необходимости склейте строку через join()
letters = []
letters.append("a")
letters.append("b")
print("".join(letters))
append() добавил список внутрь списка
Это нормальное поведение. Если нужно добавить элементы по одному, используйте extend() или цикл
items = [1, 2]
items.extend([3, 4])
print(items)
Не понимаю, почему список изменился без присваивания
Списки — изменяемые объекты. Когда вы вызываете append(), объект списка меняется сам, поэтому отдельное присваивание не требуется
Что почитать дальше по Python
Если нужен общий маршрут по теме, откройте рубрику Python. Для соседних задач пригодятся эти разборы:
- Как добавить в список элемент: append, extend и insert в Python
- Как заменить элемент в списке Python: по индексу, по значению и в цикле
- Как открыть элемент в новой вкладке Python: Selenium и рабочий пример
- Как создать массив в Python: список, array и NumPy простыми словами