Как в 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()
- Позволяет вставлять элемент в произвольную позицию в списке, указав индекс. Это более гибкий подход по сравнению с append и extend, которые добавляют только в конец.
- Не требует создания нового списка в отличие от конкатенации или присваивания по срезам. Работает путем изменения исходного списка.
- Позволяет реализовать структуры данных типа стек, очередь, дек более эффективно за счет вставки в нужные позиции.
Недостатки
- Менее эффективен по скорости по сравнению с append из-за необходимости сдвигать элементы в памяти при вставке.
- Требует явно указывать индекс для вставки, в отличие от append/extend. Это менее удобно.
- Может привести к ошибкам при неверном указании индекса для вставки.
* Подытожим, 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 достаточно инструментов для добавления данных в списки. Главное понимать различия между методами и выбирать подходящий для конкретной задачи.