Как в Python добавлять элементы в списки: методы append(), extend() и другие

Как в Python добавлять элементы в списки: методы append(), extend() и другие

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

Списки являются одними из самых востребованных структур данных, позволяющих группировать и эффективно обрабатывать коллекции элементов. Каждый Junior-программист обязан уметь работать со списками, знать их методы и уметь управляться с ними. Это тот «краеугольный камень», без которого невозможно двигаться дальше. Что ж, давайте разбираться. ↓

Как в Python используется операторы + и *

Прежде чем перейти к методам, давайте вспомним работу оператора + со списками. Он позволяет конкатенировать (объединять) два списка:

a = [1, 2, 3]
b = [4, 5, 6]
c = a + b

print(c) # Выведет [1, 2, 3, 4, 5, 6]
Однако при этом создаётся новый результирующий список c, а исходные a и b остаются неизменными.

Добавление элемента в новый список через распаковку

Оператор * (звездочка) можно применить для распаковки итерабельного объекта для создания нового списка:

List1 = [11, 12, 13]

# Добавление элемента в новый список как список вложенный в другой список
new_list1 = [List1, 14]

print(new_list1)  # Выведет: [[11, 12, 13], 14]

# Добавление элемента в новый список через распаковку
new_list2 = [*List1, 14]

print(new_list2)  # Выведет: [11, 12, 13, 14]

Чтобы расширить уже существующий список, не создавая копию, удобнее использовать методы append() и extend().

Что делает append()

Метод append() добавляет произвольный элемент в самый конец списка. Он принимает в качестве аргумента этот элемент:

list.append(element)

Рассмотрим пример добавления числа в список:

numbers = [1, 2, 3]
numbers.append(4)

print(numbers) # Выведет [1, 2, 3, 4]
Важно: append() модифицирует исходный список, без создания копии. Это экономит память.

Также в список при помощи append() можно поместить другой список или любой другой объект:

a = [1, 2, 3]
b = [4, 5, 6]
a.append(b)

print(a) # Выведет [1, 2, 3, [4, 5, 6]]

Примеры использования

  • Добавление элемента в список:
text_files = ["notes.txt", "todo.txt"]
text_files.append("keys.txt")

print(text_files)
# Результатом будет ["notes.txt", "todo.txt", "keys.txt"]
  • Добавление элементов одного списка в другой с помощью цикла:
list1 = [1, 2, 3]
list2 = [4, 5, 6]

for item in list2:
list1.append(item)

print(list1) # [1, 2, 3, 4, 5, 6]
  • Добавление текущей даты в список записей журнала:
log = []
log.append(datetime.now())
Таким образом можно легко собирать хронологическую последовательность событий.

Что делает extend()

Метод extend() также расширяет список, но может сразу добавлять сразу несколько элементов из итерируемого объекта:

list.extend(iterable)

Например, добавим все элементы списка b в список a:

a = [1, 2, 3]
b = [4, 5, 6]
a.extend(b)

print(a) # Выведет [1, 2, 3, 4, 5, 6]

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

Примеры использования

  • Классическое добавление элементов в список:
  • Добавление элементов из файла в список:
first_names = ["Иван", "Пётр"]
all_names = ["Василий", "Мария"]
first_names.extend(all_names)

print(first_names)
# Результатом будет ["Иван", "Пётр", "Василий", "Мария"]
data = []
with open("file.txt") as f:
data.extend(f.readlines())

Применение этих методов со строками

Посмотрим теперь более детально, как эти методы работают со строками:

  • append() добавит строку целиком:
a = [1, 2, 3]
a.append("text")
print(a) # [1, 2, 3, "text"]
  • А вот extend() добавит строку в список и разбьет ее на символы:
a = [1, 2, 3]
a.extend("text")
print(a) # [1, 2, 3, "t", "e", "x", "t"]
Это может быть полезно или наоборот нежелательно (зависимо от задачи).

Синтаксис и возвращаемое значение

Синтаксис методов выглядит так:

list.append(element)
list.extend(iterable)

Оба метода ничего не возвращают, а работают исключительно через изменение исходного списка.

Помимо широко используемых методов append() и extend(), есть несколько альтернативных способов внедрения элементов в список в Python.

Метод insert()

Самый популярный из них — метод insert(). В отличие от append() и extend(), он позволяет вставлять элемент в список не только в конец, но и в любую позицию, указав для этого индекс. Например, чтобы добавить элемент в начало списка, можно использовать:

mylist.insert(0, new_item)

А чтобы добавить после второго элемента:

mylist.insert(2, new_item)

Итого, метод insert() принимает два аргумента:

  • index — позиция для вставки
  • element — сам добавляемый элемент

Преимущества метода  insert()

  1. Позволяет вставлять элемент в произвольную позицию в списке, указав индекс. Это более гибкий подход по сравнению с append и extend, которые добавляют только в конец.
  2. Не требует создания нового списка в отличие от конкатенации или присваивания по срезам. Работает путем изменения исходного списка.
  3. Позволяет реализовать структуры данных типа стек, очередь, дек более эффективно за счет вставки в нужные позиции.

Недостатки

  1. Менее эффективен по скорости по сравнению с append из-за необходимости сдвигать элементы в памяти при вставке.
  2. Требует явно указывать индекс для вставки, в отличие от append/extend. Это менее удобно.
  3. Может привести к ошибкам при неверном указании индекса для вставки.

* Подытожим, insert позволяет более точную вставку данных ценой меньшей скорости и большей сложности по сравнению с append или extend. Выбор метода зависит от конкретной задачи и структуры данных.

Присваивание по срезам

Также элементы можно эффективно вставлять в нужные позиции, используя присваивание по срезам:

mylist = []
new_item1 = 'a'
new_item2 = 'b'

mylist[2:2] = [new_item1, new_item2] # На этой строчке происходит присваивание по срезам

print("Список после вставки элементов в нужное место:", mylist)
# Вывод: Список после вставки элементов в нужное место: ['a', 'b']

Здесь мы задали пустой срез от индекса 2 до 2, и присвоили ему список элементов. В результате new_item1 и new_item2 вставятся в данную позицию. Если список будет не пустой, то вы сможете увидеть такую картину:

mylist = [1,2,3,4,5]
new_item1 = 'a'
new_item2 = 'b'

print("Исходный список:", mylist)
# Вывод: Исходный список: [1, 2, 3, 4, 5]

mylist[2:2] = [new_item1, new_item2]
print("Список после вставки элементов в нужное место:", mylist)
# Вывод: Список после вставки элементов в нужное место: [1, 2, 'a', 'b', 3, 4, 5]

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

Как видите, в арсенале Python достаточно инструментов для добавления данных в списки. Главное понимать различия между методами и выбирать подходящий для конкретной задачи.
Софья Пирогова

Софья Пирогова

автор статей / копирайтер