Баннер мобильный (3) Пройти тест

Списки Python: добавляем элементы с помощью append() и extend()

Как и когда использовать методы append() и extend()

Инструкция

15 мая 2025

Поделиться

Скопировано
Списки Python: добавляем элементы с помощью append() и extend()

Содержание

    Списки в Python позволяют хранить упорядоченные последовательности элементов любых типов (числа, строки, объекты и даже другие списки). Они изменяемы, поддерживают индексацию, срезы и множество методов для добавления, удаления и модификации элементов.

    В этой статье мы сосредоточимся на способах добавления элементов в списки и разберем, когда использовать append(), а когда — extend()

    Метод append() для добавления одного элемента

    Метод append() нужен для добавления одного элемента в конец списка. Это один из самых простых и часто используемых методов модификации списков. Он поддерживает элементы любого типа данных: числа, строки, списки, словари и даже пользовательские объекты.

    Синтаксис

    Допустим, что есть список элементов list, которому мы хотим добавить еще один элемент unit. Это будет выглядеть так:

    list.append(unit)

    Таким образом unit будет добавлен в конец списка list.

    Примеры

    1. Добавление числа, строки или объекта в список

    Создаем пустой список:

    my_list = []

    Добавляем число:

    my_list.append(5)
    print(my_list)

    Вывод: [5]

    Добавляем строку:

    my_list.append("Hello")
    print(my_list)

    Вывод: [5, «Hello»]

    Добавляем объект словарь:

    my_list.append({"key": "value"})
    print(my_list)

    Вывод: [5, «Hello», {«key»: «value»}]

    Обратите внимание, что append() может принимать в один список любой объект Python. Список может состоять из чисел, строк и других объектов.

    1. Добавление другого списка одним объектом

    Создаем список:

    numbers = [1, 2, 3]

    Добавляем вложенный список в numbers:

    numbers.append([4, 5])
    print(numbers)

    Вывод: [1, 2, 3, [4, 5]]

    Таким образом, append() не распаковывает вложенные списки, а добавляет их единым элементом.

    1. Добавление элементов одного списка в другой список по одному

    Списки можно добавлять в другие списки не только как цельный объект, но и поэлементно.

    Например, создадим два списка — source и target.

    source = [1, 2, 3, 4, 5]
    target = []

    Воспользуемся циклом for, чтобы добавить элементы в список по определенному условию: добавлять будем только четные числа.

    for num in source:
        if num % 2 == 0:
            target.append(num)

    Выводим получившийся список:

    print(target)

    Вывод: [2, 4]

    Таким образом, четные числа из source добавились в target по одному.

    1. Работа с изменяемыми переменными

    Объекты типа list (список), set (множество), dict (словарь) и class (экземпляр класса) являются изменяемыми.

    Пример со списком

    Создаем список my_list:

    my_list = [0, 1]

    Создаем еще один список new_list:

    new_list = [2, 3]

    Затем добавляем new_list в my_list:

    my_list.append(new_list)
    print(my_list)

    Вывод: [0, 1, [2, 3]]

    Изменяем вложенный список new_list и выводим my_list:

    nested_list.append(4)
    print(my_list)

    Вывод: [0, 1, [2, 3, 4]]

    Пример со словарем

    Создаем словарь d и пустой список list:

    d = {"x": 1}
    list = []

    Добавляем в list объект словаря d:

    list.append(d)

    При выводе списка получим:

    [{'x': 1}]

    Затем добавляем в словарь новую пару «ключ — значение» и выводим получившийся list:

    d["y"] = 2
    print(list)

    Вывод: [{‘x’: 1, ‘y’: 2}]

    Получается, что если объект изменяемый, то его последующие изменения отражаются в списке, в который его добавили. 

    А неизменяемые переменные, такие как строки и числовые значения, остаются в списке без изменений даже после переопределения переменной.

    1. Appendleft, appendright и двусторонние очереди

    Для списков типа deque (двусторонняя очередь) из модуля collections в Python существуют методы appendleft() и appendright().

    В отличие от обычного списка, deque (double-ended queue) принимает новые элементы как в начало, так и в конец.

    По принципу работы и синтаксису appendleft() и appendright() почти эквивалентны append().

    Создаем двустороннюю очередь deq:

    deq = deque([1, 2, 3])

    Добавляем элемент 0 в начало очереди:

    deq.appendleft(0)

    Добавляем 4 в конец очереди и выводим результат:

    deq.appendright(4)
    print(deq)

    Вывод: deque([0, 1, 2, 3, 4])

    Особенности методов append()

    Метод append() (а также appendleft() и appendright() для deque) работает in-place (на месте), то есть изменяет существующий список, а не создает новый. Иначе говоря, он возвращает None.

    Например:

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

    Вывод: None

    print(my_list)

    Вывод: [1, 2, 3]

    Это эффективно с точки зрения памяти (временная сложность — O(1), в том числе и для deque).

    Метод extend() для добавления нескольких элементов

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

    Метод extend() работает с любым итерируемым объектом, включая генераторы. Но если аргумент неитерируемый, возникнет ошибка TypeError.

    Синтаксис

    По тому же принципу, что и в append(), добавляем в список list итерируемый объект iterable с помощью extend():

    list.extend(iterable)

    Примеры

    1. Добавление элементов из другого списка, кортежа или множества

    Создаем список с элементами:

    my_list = [1, 2]

    С помощью extend() добавляем в него элементы из другого списка:

    my_list.extend([3, 4])
    print(my_list)

     Вывод: [1, 2, 3, 4]

    Добавляем элементы из кортежа my_tuple (неизменяемого списка):

    my_tuple = (5, 6)
    my_list.extend(my_tuple)
    print(my_list)

     Вывод: [1, 2, 3, 4, 5, 6]

    Также можно добавить элементы из множества. В данном случае в множестве содержится другое множество — неизменяемое (frozenset):

    my_set = {1, "hello", frozenset([7, 8])}
    my_list.extend(my_set)
    print(my_list)

     Вывод: [1, 2, 3, 4, 5, 6, 1, «hello», frozenset({7, 8})] 

    При этом порядок элементов из множества не гарантирован, так как множества в Python не упорядочены: они не имеют фиксированного порядка и могут возвращаться в произвольном порядке.

    Также важно помнить, что в множестве нельзя использовать обычные списки, так как они не хешируемы.

    Таким образом, добавление элементов с помощью extend() равнозначно добавлению списка поэлементно в другой список с помощью append() и цикла for.

    1. Работа со строками (распаковка символов)
    my_list = ["a", "b"]

    Распаковываем строку, добавляем в список и выводим результат:

    my_list.extend("xyz")
    print(my_list) 

    Вывод: [«a», «b», «x», «y», «z»]

    1. Добавление элементов из генератора
    my_list = [1, 2]

    Распаковываем элементы из генератора range (создающий последовательность чисел):

    my_list.extend(range(3, 5))

    Генератор range(3, 5) генерирует целые числа от 3 (включительно) до 5 (невключительно) с шагом 1. Он создает итерируемый объект, возвращающий числа 3 и 4.

    print(my_list) 

    Вывод: [1, 2, 3, 4]

    Используем генераторное выражение для получения другого результата:

    my_list.extend(x * 2 for x in [3, 4])
    print(my_list)

    Вывод: [1, 2, 3, 4, 6, 8]

    1. Добавление пустого итерируемого объекта

    Пустой итерируемый объект (например, пустой список, кортеж или множество) не содержит элементов, поэтому его добавление через extend() не изменяет список.

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

    Вывод: [1, 2, 3, 4]

    1. Добавление списка словарей
    my_list = [{"id": 1}]

    Добавляем список словарей:

    my_list.extend([{"id": 2}, {"id": 3}]) 

    Каждый словарь из списка добавляется как отдельный элемент.

    print(my_list)  

    Вывод: [{«id»: 1}, {«id»: 2}, {«id»: 3}]

    1. Метод extendleft() для двусторонних очередей

    Как и append(), метод extend() применяется с deque. Метод extendleft() добавляет элементы итерируемого объекта в начало, а extend() — в конец.

    deq = deque([1, 2])

    Добавляем элементы в начало:

    deq.extendleft([3, 4]) 
    print(deq)

    Вывод: deque([4, 3, 1, 2])

    Добавляем элементы в конец:

    deq.extend([5, 6])
    print(deq)

    Вывод: deque([4, 3, 1, 2, 5, 6])

    Особенности методов extend()

    Как и в случае с append(), extend() также модифицирует список in-place, но его временная сложность отличается и равна O(n), где n — количество элементов в итерируемом объекте.

    Какой метод выбрать

    • Используйте append(), если нужно добавить один элемент (число, строку, список, словарь) как единый объект.
    • Используйте extend(), если нужно добавить несколько элементов из итерируемого объекта (списка, кортежа, множества, строки) по одному. Либо можно использовать append() в комбинации с циклом for, чтобы «вытаскивать» объект из другого списка поэлементно.

    Инструкция

    Поделиться

    Скопировано
    0 комментариев
    Комментарии