Список — это упорядоченный составной тип данных в языке программирования Python, предназначенный для хранения последовательного набора элементов.
Доступ (добавление, изменение, удаление) к каждому элементу осуществляется по индексу. Индексация (нумерация) в списке начинается с нуля.
По сути, список аналогичен массиву в других языках программирования.
В этом руководстве будет подробно показано, как добавить новый элемент в список Python с помощью имеющихся в языке методов.
Все показанные примеры запускались на облачном сервере Timeweb Cloud под управлением операционной системы Ubuntu 22.04 с использованием интерпретатора Python версии 3.10.12.
В качестве альтернативного инструмента тестирования (запуска) кода Python можно использовать онлайн компиляторы:
Чаще всего в логике большинства программ, написанных на Python, необходимо просто добавить элемент в конец списка.
Для этого в языке Python есть соответствующий метод append()
:
employeeList = ["Евгений", "Екатерина", "Иван"] # создание небольшого списка, в который будет добавляться новый элемент
print("Список сотрудников:", employeeList) # вывод в консольный терминал содержимого списка перед добавлением нового элемента
print("Длина списка:", len(employeeList)) # вывод в консольный терминал длины списка перед добавлением нового элемента
employeeList.append("Александр") # добавление нового элемента в конец списка
print("Обновленный список сотрудников:", employeeList) # вывод в консольный терминал содержимого списка после добавлением нового элемента
print("Обновленная длина списка:", len(employeeList)) # вывод в консольный терминал длины списка после добавлением нового элемента
Результатом работы этого скрипта будет следующий консольный вывод:
Список сотрудников: ['Евгений', 'Екатерина', 'Иван']
Длина списка: 3
Обновленный список сотрудников: ['Евгений', 'Екатерина', 'Иван', 'Александр']
Длина списка: 4
Наглядно видно, после выполнения метода append()
в конец списка добавился новый элемент.
Важно понимать, что функция append()
добавляет элементы по одному. Например, такая конструкция вызовет ошибку:
employeeList = ["Евгений", "Екатерина", "Иван"]
employeeList.append("Александр", "Денис")
При этом вызов метода append()
со списком элементов в качестве единственного аргумента приведет к добавлению списка элементов, а не его содержимого по отдельности:
employeeList = ["Евгений", "Екатерина", "Иван"]
print("Список сотрудников:", employeeList)
print("Длина списка:", len(employeeList))
employeeList.append(["Александр", "Денис"]) # добавление в список другого списка элементов
print("Обновленный список сотрудников:", employeeList)
print("Обновленная длина списка:", len(employeeList))
Консольный вывод этого скрипта будет таким:
Список сотрудников: ['Евгений', 'Екатерина', 'Иван']
Длина списка: 3
Обновленный список сотрудников: ['Евгений', 'Екатерина', 'Иван', ['Александр', 'Денис']]
Обновленная длина списка: 4
Здесь четко видно, что добавленный в конец список стал новым элементом исходного списка.
Аналогично, можно добавить элемент в пустой список Python:
employeeList = []
employeeList.append("Абсолютный Работник")
print("Список сотрудников:", employeeList)
Консольный вывод будет таким:
Список сотрудников: ['Абсолютный Работник']
cloud
Для того чтобы добавить в список сразу несколько элементов, необходимо воспользоваться функцией extend()
:
employeeList = ["Евгений", "Екатерина", "Иван"]
print("Список сотрудников:", employeeList)
print("Длина списка:", len(employeeList))
employeeList.extend(["Александр", "Анастасия"]) # добавление в список элементов другого списка
employeeList.extend(("Дед", "Мороз")) # добавление в список элементов кортежа
employeeList.extend("TIMEWEB") # добавление в список символов строки
print("Обновленный список сотрудников:", employeeList)
print("Обновленная длина списка:", len(employeeList))
Консольный вывод этого примера будет таким:
Список сотрудников: ['Евгений', 'Екатерина', 'Иван']
Длина списка: 3
Обновленный список сотрудников: ['Евгений', 'Екатерина', 'Иван', 'Александр', 'Анастасия', 'Дед', 'Мороз', 'T', 'I', 'M', 'E', 'W', 'E', 'B']
Обновленная длина списка: 14
Как видно, в отличие от append()
метод extend()
преобразует переданную в качестве аргумента переменную составного типа (в том числе строку) в последовательность элементов, которые вставляются в список в чистом виде.
По сути, эту операцию целесообразно считать сложением двух списков. Поэтому ее можно выразить в семантически идентичном, но синтаксически отличном виде:
employeeList = ["Евгений", "Екатерина", "Иван"]
employeeListNew = ["Александр", "Анастасия"]
employeeList += employeeListNew
print("Обновленный список сотрудников:", employeeList)
print("Обновленная длина списка:", len(employeeList))
Консольный вывод этого скрипта будет таким:
Обновленный список сотрудников: ['Евгений', 'Екатерина', 'Иван', 'Александр', 'Анастасия']
Обновленная длина списка: 5
Либо можно создать новый список, оставив составляющие его списки в исходном состоянии:
employeeList = ["Евгений", "Екатерина", "Иван"]
employeeListNew = ["Александр", "Анастасия"]
employeeListCommon = employeeList + employeeListNew
print("Список сотрудников:", employeeList)
print("Длина списка:", len(employeeList))
print("")
print("Список новых сотрудников:", employeeListNew)
print("Длина списка новых сотрудников:", len(employeeListNew))
print("")
print("Обновленный список сотрудников:", employeeListCommon)
print("Обновленная длина списка:", len(employeeListCommon))
В этом случае консольный вывод будет следующим:
Список сотрудников: ['Евгений', 'Екатерина', 'Иван']
Длина списка: 3
Список новых сотрудников: ['Александр', 'Анастасия']
Длина списка новых сотрудников: 2
Обновленный список сотрудников: ['Евгений', 'Екатерина', 'Иван', 'Александр', 'Анастасия']
Обновленная длина списка: 5
Показанные выше способы добавления элемента (или элементов) в список достаточно специализированы, а значит, и ограничены — все они вставляют новые элементы только в конец исходного списка.
Однако в языке Python есть и более универсальный метод insert()
, который позволяет добавить элемент в список по индексу.
Это значит, что этот метод может вставить элемент как в начало списка, так и в конец. А еще в любую другую произвольную позицию. Например, ровно по середине.
Чаще всего необходимо вставить новый элемент в любую произвольную позицию списка. То есть вставка выполняется по индексу с его возможным значением от 0 до длины списка:
employeeList = ["Евгений", "Екатерина", "Александр", "Денис", "Антон", "Иван"]
print("Список сотрудников:", employeeList)
print("Длина списка:", len(employeeList))
employeeList.insert(1, "Петр") # вставляем новый элемент под индексом 1 (в этом случае он станет вторым по счету, а остальные элементы сместятся вперед на одну позицию)
print("Обновленный список сотрудников:", employeeList)
print("Обновленная длина списка:", len(employeeList))
Консольный вывод этого скрипта будет таким:
Список сотрудников: ['Евгений', 'Екатерина', 'Александр', 'Денис', 'Антон', 'Иван']
Длина списка: 6
Обновленный список сотрудников: ['Евгений', 'Петр', 'Екатерина', 'Александр', 'Денис', 'Антон', 'Иван']
Обновленная длина списка: 7
Как можно заметить, вставка нового элемента по индексу приводит к смещению всех последующих элементов на одну позицию вперед. В свою очередь длина списка также увеличивается.
Этот метод оказывается крайне полезен, когда необходимо добавить элемент в начало списка Python. В этом случае в качестве индекса указывается позиция 0:
employeeList = ["Евгений", "Екатерина", "Александр", "Денис", "Антон", "Иван"]
print("Список сотрудников:", employeeList)
employeeList.insert(0, "Петр") # вставляем новый элемент под индексом 0, то есть в начало списка
print("Обновленный список сотрудников:", employeeList)
Консольный вывод этого скрипта будет уже таким:
Список сотрудников: ['Евгений', 'Екатерина', 'Александр', 'Денис', 'Антон', 'Иван']
Обновленный список сотрудников: ['Петр', 'Евгений', 'Екатерина', 'Александр', 'Денис', 'Антон', 'Иван']
Аналогично, все последующие элементы смещаются на одну позицию вперед, а длина списка увеличивается.
Метод insert()
можно использоваться в качестве альтернативы методу append()
для вставки элемента в конец списка. В этом случае в качестве индекса указывается предварительно найденное значение длины списка:
employeeList = ["Евгений", "Екатерина", "Александр", "Денис", "Антон", "Иван"]
print("Список сотрудников:", employeeList)
employeeList.insert(len(employeeList), "Петр") # вставляем новый элемент на позицию последнего индекса
print("Обновленный список сотрудников:", employeeList)
В этом случае результат в консольном выводе полностью повторяет результат выполнения функции append()
.
Список сотрудников: ['Евгений', 'Екатерина', 'Александр', 'Денис', 'Антон', 'Иван']
Обновленный список сотрудников: ['Евгений', 'Екатерина', 'Александр', 'Денис', 'Антон', 'Иван', 'Петр']
Обратите внимание, что значение длины списка, полученное методом len()
, соответствует значению индекса несуществующего элемента, который идет следом за самым последним.
Именно на это место и вставляется новый элемент, становясь последним элементом исходного списка.
В некоторых задачах необходимо добавить элемент ровно в середину списка — ни до, ни после этой позиции.
Чтобы это сделать, нужно вставить элемент в индекс со значением, равным половине длины списка:
employeeList = ["Евгений", "Екатерина", "Иван", "Анастасия"]
print("Список сотрудников:", employeeList)
# вставляем новый элемент ровно в середину списка
employeeList.insert(int(len(employeeList) / 2), "Александр") # результат деления на 2 необходимо в явном виде преобразовать в переменную типа int
print("Обновленный список сотрудников:", employeeList)
В результате новый элемент окажется посередине списка — до и после него будет одинаковое количество элементов:
Список сотрудников: ['Евгений', 'Екатерина', 'Иван', 'Анастасия']
Обновленный список сотрудников: ['Евгений', 'Екатерина', 'Александр', 'Иван', 'Анастасия']
Тем не менее ситуация, когда в списке четное количество элементов, бывает не всегда:
# нечетное количество элементов
employeeList = ["Евгений", "Екатерина", "Иван", "Анастасия", "Денис"]
print("Список сотрудников:", employeeList)
employeeList.insert(int(len(employeeList) / 2), "Александр") # по прежнему получаем индекс вставки через деление длины списка на 2
print("Обновленный список сотрудников:", employeeList)
Консольный вывод будет таким:
Список сотрудников: ['Евгений', 'Екатерина', 'Иван', 'Анастасия', 'Денис']
Обновленный список сотрудников: ['Евгений', 'Екатерина', 'Александр', 'Иван', 'Анастасия', 'Денис']
В этом примере в списке было 5 элементов, которые были поделены на 2. Результат 2,5 был округлен в меньшую сторону до 2 в момент преобразования типа из float
в int
. Таким образом, вставляемый элемент окажется перед центральным элементом в середине списка.
Если требуется вставить элемент после центрального элемента, тогда необходимо выполнить округление дробного индекса (полученного делением длины списка на 2) в большую сторону:
import math # подключение библиотеки математики, которая содержит метод округления в большую сторону
# нечетное количество элементов
employeeList = ["Евгений", "Екатерина", "Иван", "Анастасия", "Денис"]
print("Список сотрудников:", employeeList)
employeeList.insert(math.ceil(len(employeeList) / 2), "Александр") # по прежнему получаем индекс вставки через деление длины списка на 2
print("Обновленный список сотрудников:", employeeList)
В этом случае консольный вывод будет уже таким:
Список сотрудников: ['Евгений', 'Екатерина', 'Иван', 'Анастасия', 'Денис']
Обновленный список сотрудников: ['Евгений', 'Екатерина', 'Иван', 'Александр', 'Анастасия', 'Денис']
В языке Python нет стандартного метода для добавления сразу нескольких элементов на произвольную позицию, будь то начало, конец или середина.
Такой метод придется написать вручную на основе стандартной функции insert()
:
# функция множественной вставки по индексу
def insertMany(index, listOriginal, listAddition):
for element in listAddition:
listOriginal.insert(index, element)
index += 1
employeeList = ["Евгений", "Екатерина", "Иван", "Анастасия", "Денис"]
employeeListNew = ["Петр", "Ангелина", "Ксения"]
print("Список сотрудников:", employeeList)
insertMany(2, employeeList, employeeListNew)
print("Обновленный список сотрудников:", employeeList)
Результат работы скрипта следующий:
Список сотрудников: ['Евгений', 'Екатерина', 'Иван', 'Анастасия', 'Денис']
Обновленный список сотрудников: ['Евгений', 'Екатерина', 'Петр', 'Ангелина', 'Ксения', 'Иван', 'Анастасия', 'Денис']
Однако в созданной функции есть проблема — она не является частью списка. Было бы неплохо сделать так, чтобы функция insertMany()
была методом переменной списка, подобно функциям append()
, extend()
, insert()
.
Язык Python позволяет это сделать:
# импорт специального пространства имен, в котором находятся встроенные типы
import builtins
# обновленный класс list с функцией множественной вставки по индексу
class list2(list):
def insertMany(self, index, listAddition):
for element in listAddition:
self.insert(index, element)
index += 1
# заменяем в пространстве имен встроенных типов класс list на list2
builtins.list = list2
employeeList = list(["Евгений", "Екатерина", "Иван", "Анастасия", "Денис"]) # новую версию списка необходимо создать с явным указанием типа
employeeListNew = ["Петр", "Ангелина", "Ксения"]
print("Список сотрудников:", employeeList)
employeeList.insertMany(2, employeeListNew) # в методе обновленного класса list (list2) указывается индекс и список вставляемых элементов
print("Обновленный список сотрудников:", employeeList)
Консольный вывод в этом случае будет аналогичным:
Список сотрудников: ['Евгений', 'Екатерина', 'Иван', 'Анастасия', 'Денис']
Обновленный список сотрудников: ['Евгений', 'Екатерина', 'Петр', 'Ангелина', 'Ксения', 'Иван', 'Анастасия', 'Денис']
Таким образом можно добавить в список элементы другого списка на конкретную позицию.
Разверните свой Python-проект в облаке
В языке программирования Python добавление в список одного или нескольких элементов можно выполнить с помощью трех базовых функций:
append()
. Добавляет элемент в конец списка.
extend()
. Добавляет несколько элементов в конец списка.
insert()
. Вставляет элемент по конкретному индексу списка.
Комбинация этих методов дает широкую вариативность того, как новые элементы будут добавляться в уже существующий список.
Тем не менее эти методы довольно низкоуровневые. В некоторых случаях требуется более сложная механика добавления элементов. Например, вставка сразу нескольких элементов по определенному индексу списка.
Более подробную информацию о списках и их использовании можно найти в официальной документации Python.