Списки 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.
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() перебирает итерируемый объект — список, кортеж, множество или любую другую последовательность — и добавляет каждый его элемент в конец списка:
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, сдвигая все существующие элементы начиная с этого индекса на одну позицию вправо:
Добавление в начало списка (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(). - Нужно сохранить исходный список без изменений: используйте оператор
+и присвойте результат новой переменной. - Вставить несколько элементов в середину: используйте срезовое присваивание.
Связанные главы
- Списки Python — создание списков, индексирование и свойства списков
- Доступ к элементам списка — чтение элементов по индексу и срезу
- Изменение элементов списка — обновление существующих элементов на месте
- Удаление элементов списка — удаление элементов с помощью
remove(),pop()иdel - Методы списков — полный справочник по всем встроенным методам списков