W3docs

Списки Python: как добавить элементы в список

Все способы добавления элементов в список Python: append, extend, insert, оператор + и срезовое присваивание — с примерами и типичными ошибками.

Списки Python — это изменяемые последовательности, то есть вы можете добавлять, удалять и изменять элементы после создания списка. В этой главе рассмотрены все методы и операторы Python для вставки новых элементов в список, объяснено, когда использовать каждый из них, и описаны наиболее распространённые подводные камни.

Методы и операторы: краткий обзор

СпособДобавляетПозицияИзменяет на месте?
list.append(x)один элементконецда
list.extend(iterable)все элементы итерируемогоконецда
list.insert(i, x)один элементиндекс iда
list + otherвсе элементы из otherконецнет (возвращает новый список)
list += otherвсе элементы из otherконецда
list[i:i] = itemsнесколько элементовиндекс iда

Использование append()

append() добавляет один элемент в конец списка. Метод изменяет список на месте и всегда возвращает None.

python— editable, runs on the server

append() принимает любой объект Python — строки, целые числа, boolean-значения и даже другие списки:

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

Подводный камень: append() вкладывает список

Если передать список в append(), Python воспримет его как один элемент и создаст вложенный список — два списка не объединятся:

fruits = ['apple', 'banana']
fruits.append(['grape', 'kiwi'])
print(fruits)   # ['apple', 'banana', ['grape', 'kiwi']]
print(len(fruits))  # 3, not 4

Чтобы объединить два списка, используйте extend() или оператор + (описаны ниже).

Использование extend()

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

python— editable, runs on the server

append() против extend() — сравнение

a = [1, 2, 3]
a.extend([4, 5])
print(a)        # [1, 2, 3, 4, 5]

b = [1, 2, 3]
b.append([4, 5])
print(b)        # [1, 2, 3, [4, 5]]  ← nested!

Подводный камень: extend() со строкой

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

letters = ['a', 'b']
letters.extend('cd')
print(letters)  # ['a', 'b', 'c', 'd']

Если вы хотите добавить всю строку как один элемент, используйте append().

Использование insert()

insert(i, x) добавляет элемент x на позицию i, сдвигая все существующие элементы начиная с этого индекса на одну позицию вправо:

python— editable, runs on the server

Добавление в начало списка (prepending) — распространённый сценарий использования:

fruits = ['banana', 'orange']
fruits.insert(0, 'apple')
print(fruits)  # ['apple', 'banana', 'orange']

Подводный камень: индекс за пределами длины списка

Если переданный индекс больше текущей длины списка, Python не вызывает ошибку — элемент просто добавляется в конец:

fruits = ['apple', 'banana']
fruits.insert(100, 'orange')
print(fruits)  # ['apple', 'banana', 'orange']

Отрицательные индексы тоже работают: insert(-1, x) вставляет элемент непосредственно перед последним.

Использование оператора +

Оператор + конкатенирует два списка и возвращает новый список. Исходные списки при этом не изменяются:

a = [1, 2, 3]
b = [4, 5, 6]
c = a + b
print(c)  # [1, 2, 3, 4, 5, 6]
print(a)  # [1, 2, 3]  — unchanged

Используйте +, когда нужно сохранить исходные списки нетронутыми или когда вы строите выражение со списком, а не изменяете его.

Использование += (расширенное присваивание)

Оператор += является сокращением для extend() — он добавляет элементы правого итерируемого объекта в существующий список на месте:

a = [1, 2, 3]
a += [7, 8]
print(a)  # [1, 2, 3, 7, 8]

В отличие от +, оператор += не создаёт новый список — он обновляет a на месте, что эффективнее по памяти при работе с большими списками.

Вставка нескольких элементов в заданную позицию (срезовое присваивание)

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

nums = [1, 2, 5, 6]
nums[2:2] = [3, 4]   # insert [3, 4] starting at index 2
print(nums)          # [1, 2, 3, 4, 5, 6]

Синтаксис list[i:i] = items открывает окно нулевой ширины на индексе i и заполняет его элементами из items. Существующие элементы при этом не удаляются.

Выбор подходящего метода

  • Добавить один элемент в конец: используйте append(). Это самый простой и быстрый вариант для вставки одного элемента.
  • Объединить другой список с текущим: используйте extend() или +=. Оба варианта равнозначны; += чуть более идиоматичен в циклах.
  • Добавить один элемент в заданную позицию: используйте insert().
  • Нужно сохранить исходный список без изменений: используйте оператор + и присвойте результат новой переменной.
  • Вставить несколько элементов в середину: используйте срезовое присваивание.

Связанные главы

Практика

Практика
Which of the following methods add items to a Python list?
Which of the following methods add items to a Python list?
Was this page helpful?