Добавление элемента в конец списка: полное руководство для Python

Раздел: Работа с коллекциями -> Операции со списками

Основные способы добавления элемента в конец списка

Наиболее распространённый и эффективный способ добавить один элемент в конец списка в Python – использовать метод append(). Этот метод модифицирует исходный список, добавляя переданный объект как единый элемент (даже если это другой список или кортеж). Возвращаемое значение – None, поэтому нужно помнить, что append не создаёт новый список, а изменяет существующий.

my_list = [1, 2, 3]
my_list.append(4)
print(my_list)  # [1, 2, 3, 4]

Python list element (получение элемента списка в python)

[1, 2, 3, 4]

Python add to list (добавление элемента в список)

Типичные ошибки:

Начинающие программисты иногда пытаются присвоить результат append переменной, ожидая новый список:

new_list = my_list.append(5)  # new_list = None, my_list изменён

Python copy list (копирование списка в python)

Или забывают, что append добавляет элемент целиком, например, при добавлении списка:

my_list.append([5, 6])  # добавляет вложенный список
print(my_list)  # [1, 2, 3, 4, [5, 6]]

Python list extend (метод extend для списка)

Если требовалось расширить список элементами другого списка, следует использовать extend() или оператор +=.

Целесообразность: метод append применяется, когда нужно поочерёдно накапливать элементы в одном списке, например, при обработке данных в цикле.

Как добавить элемент в конец списка с помощью оператора конкатенации?

Оператор += (эквивалент вызова extend) добавляет элементы итерируемого объекта в конец списка. Если нужно добавить один элемент, его помещают в одноэлементный список или кортеж.

my_list = [1, 2, 3]
my_list += [4]       # добавляет 4
print(my_list)       # [1, 2, 3, 4]

Python list reverse (реверс списка в python)

[1, 2, 3, 4]

Python empty list (создание пустого списка)

Под капотом вызывается метод __iadd__, который для списков работает как extend. Следует учитывать, что правая часть должна быть итерируемой.

Частая ошибка – попытка добавить строку с помощью += без заключения в список:

my_list += "abc"  # добавит 'a', 'b', 'c' как отдельные элементы
print(my_list)    # [1, 2, 3, 4, 'a', 'b', 'c']

Python list slice (срезы списков в python)

Правильно: my_list += ["abc"].

Когда использовать: при необходимости добавить один или несколько элементов из другого списка, а также когда код часто использует оператор += для наглядности.

Как вставить элемент в конец списка с помощью метода insert?

Метод insert(index, element) вставляет элемент на указанную позицию. Чтобы добавить в конец, индексом выступает длина списка, получаемая через len().

my_list = [1, 2, 3]
my_list.insert(len(my_list), 4)
print(my_list)  # [1, 2, 3, 4]

Python filter list (фильтрация списка с помощью filter)

[1, 2, 3, 4]

Python list function (функции для работы со списками)

Метод insert работает медленнее append, так как после вставки все элементы справа сдвигаются. Однако он даёт гибкость при вставке в произвольное место.

Частая ошибка – передача неверного индекса (например, -1), что вставляет элемент перед последним, а не в конец. Только len(my_list) гарантирует добавление в конец.

Применение: когда нужно явно указывать позицию вставки, или когда append недоступен (например, в некоторых пользовательских классах, наследующих от list с переопределённым append).

Можно ли добавить один элемент в конец списка с помощью extend?

Метод extend(iterable) добавляет все элементы переданного итерируемого объекта в конец списка. Для добавления одного элемента нужно передать его в итерируемом контейнере, например, в списке или кортеже.

my_list = [1, 2, 3]
my_list.extend([4])   # добавляет 4
print(my_list)        # [1, 2, 3, 4]

Python добавить элемент в массив (добавление элемента в конец списка (append) в python)

[1, 2, 3, 4]

элемент двумерного массива python (доступ к элементу двумерного массива (списка списков) в python)

Результат аналогичен +=. Однако extend принимает любой итератор, что может быть удобно при работе с генераторами.

Если передать число, возникнет ошибка TypeError: 'int' object is not iterable. Также, как и в случае с +=, передача строки разобьёт её на символы.

Когда использовать: когда нужно добавить элементы из генератора, кортежа или другого списка, а также для читаемости кода: my_list.extend([new_item]) явно показывает, что расширяем список одним элементом.

Как создать новый список, добавив элемент в конец, не изменяя исходный?

Иногда требуется получить новый список с добавленным элементом, оставив исходный без изменений. Этого можно добиться с помощью распаковки (*) или конкатенации оператором +.

original = [1, 2, 3]
new_list = [*original, 4]   # распаковка
# или new_list = original + [4]
print(original)   # [1, 2, 3]
print(new_list)   # [1, 2, 3, 4]

Python обратиться к элементу списка (обращение к элементу списка по индексу в python)

[1, 2, 3]
[1, 2, 3, 4]

При конкатенации создаётся новый объект списка, а исходный остаётся неизменным. Распаковка работает аналогично, но синтаксически более компактна.

Обе операции имеют временную сложность O(n) (копирование всех элементов), поэтому для частых вставок в конец лучше использовать append. Кроме того, при использовании + оба операнда должны быть списками, иначе нужно приводить типы.

Когда применять: при функциональном стиле программирования, когда важна неизменяемость данных (например, при передаче списка в несколько функций), или при написании однострочников.

- Python 3 индекс элемента (получение индекса элемента в списке/строке python 3)
- Python максимальный элемент массива (поиск максимального элемента в списке с помощью max в python)
- Python одинаковые элементы списков (поиск одинаковых (повторяющихся) элементов в списках python)

Расширенные примеры и сравнение методов

В этом разделе представлены более сложные сценарии использования методов добавления в конец, а также их сравнение по производительности.

Сбор данных в цикле с append

Типичный случай – накопление результатов обработки элементов другой коллекции. Допустим, нужно отфильтровать чётные числа из списка и сохранить их квадраты.

Пример
numbers = [1, 2, 3, 4, 5, 6]
even_squares = []
for n in numbers:
    if n % 2 == 0:
        even_squares.append(n ** 2)
print(even_squares)  # [4, 16, 36]
[4, 16, 36]

Использование append здесь предпочтительнее, так как оно выполняется за O(1) в среднем и не создаёт промежуточные копии списка.

Сравнение производительности: append vs += vs insert

Воспользуемся модулем timeit для замеров времени добавления 10 000 элементов.

Пример
import timeit

setup = "my_list = []"
stmt_append = "my_list.append(1)"
stmt_iadd = "my_list += [1]"
stmt_insert = "my_list.insert(len(my_list), 1)"

t1 = timeit.timeit(stmt_append, setup, number=10000)
t2 = timeit.timeit(stmt_iadd, setup, number=10000)
t3 = timeit.timeit(stmt_insert, setup, number=10000)

print(f"append: {t1:.6f} сек")
print(f"+=    : {t2:.6f} сек")
print(f"insert: {t3:.6f} сек")
append: 0.001454 сек
+=    : 0.001789 сек
insert: 0.002891 сек

Из результатов видно, что append самый быстрый, += немного медленнее (из-за создания временного списка [1]), а insert значительно отстаёт из-за сдвига элементов. Для массового добавления элементов в конец выбирайте append.

Добавление элементов по условию с использованием генераторов и extend

Если нужно добавить в список все элементы, удовлетворяющие условию, удобно применить extend вместе с генератором. Например, собираем все чётные числа из нескольких коллекций:

Пример
list1 = [1, 2, 3, 4]
list2 = [5, 6, 7, 8]
even_list = []
even_list.extend(x for x in list1 if x % 2 == 0)
even_list.extend(x for x in list2 if x % 2 == 0)
print(even_list)  # [2, 4, 6, 8]
[2, 4, 6, 8]

Здесь extend принимает генератор, который вычисляет элементы «на лету», не создавая промежуточный список.

Создание нового списка с помощью распаковки внутри функции

Распаковка удобна, когда нужно вернуть новый список из функции, не изменяя исходный. Например, функция добавляет суффикс ко всем строковым элементам:

Пример
def add_suffix(words, suffix):
    return [*words, suffix]

original = ["hello", "world"]
result = add_suffix(original, "!")
print(original)  # ['hello', 'world']
print(result)    # ['hello', 'world', '!']
['hello', 'world']
['hello', 'world', '!']

Типичная ошибка: изменение списка во время итерации

Если во время цикла по списку добавлять в него элементы с помощью append, цикл может стать бесконечным или поведение будет неопределённым. Правильный подход – сначала собрать новые элементы в отдельный список, а затем расширить исходный.

Пример
# Неправильно
my_list = [1, 2, 3]
for x in my_list:
    if x < 3:
        my_list.append(x * 10)  # увеличивает список во время итерации
print(my_list)  # бесконечный цикл или неожиданный результат

# Правильно
my_list = [1, 2, 3]
tmp = []
for x in my_list:
    if x < 3:
        tmp.append(x * 10)
my_list.extend(tmp)
print(my_list)  # [1, 2, 3, 10, 20]
[1, 2, 3, 10, 20]

Использование append для многоуровневых списков

При работе с матрицами или деревьями append может добавлять целые строки или поддеревья как один элемент:

Пример
matrix = [[1, 2], [3, 4]]
new_row = [5, 6]
matrix.append(new_row)
print(matrix)  # [[1, 2], [3, 4], [5, 6]]

# Если нужно добавить элементы каждого ряда, а не ряд целиком, используем extend:
flattened = []
for row in matrix:
    flattened.extend(row)
print(flattened)  # [1, 2, 3, 4, 5, 6]
[[1, 2], [3, 4], [5, 6]]
[1, 2, 3, 4, 5, 6]

Эти примеры показывают, что выбор метода зависит от задачи: для однократного добавления элемента – append, для добавления множества элементов – extend или +=, для неизменяемости – конкатенация или распаковка, для произвольной позиции – insert.

Добавление элемента в конец списка (append) в Python - comments

En
Python добавить элемент в массив (python)