На этом шаге мы рассмотрим, что такое список и перечислим некоторые операции над списками.
Python включает контейнерные типы данных, позволяющие легко и эффективно осуществлять сложные операции.
Список (list) - это контейнерный тип данных, предназначенный для хранения последовательности элементов. В отличие от строк, списки изменяемые (mutable), их можно модифицировать во время выполнения. Что такое тип данных список, удобнее всего показать на примерах:
l = [1, 2, 2] print(len(l)) # 3
Этот фрагмент кода демонстрирует создание списка и заполнение его тремя целочисленными элементами с помощью квадратных скобок. Как видите, в списке могут быть повторяющиеся элементы. Функция len() возвращает количество элементов в списке.
Ключевое слово is просто проверяет, ссылаются ли две переменные на один объект в памяти. Новичков, у которых нет опыта работы с Python, оно может привести в замешательство. В примере 1.7 мы проверяем, ссылаются ли два целых числа и два списка на одни и те же объекты в памяти.
y = x = 3 print(x is y) # True print([3] is [3]) # False
Если создать два списка (даже состоящих из одних и тех же элементов), то они будут ссылаться на два различных объекта-списка в памяти. Модификация одного из этих объектов никак не повлияет на второй. Списки - изменяемые, поскольку их можно модифицировать после создания. Следовательно, если проверить, ссылаются ли два списка на один объект в памяти, результат будет равен False. А целочисленные значения - неизменяемые, так что нет риска случайно изменить через объект одной переменной значения всех остальных переменных. Объект 3 типа integer нельзя изменить, поскольку такая попытка просто приведет к созданию нового объекта integer, а старый останется неизменным.
Язык Python предлагает три основных способа добавления элементов в уже существующий список:
# 1. Добавление в конец списка l = [1, 2, 2] l.append(4) print(l) # [1, 2, 2, 4] # 2. Вставка l = [1, 2, 4] l.insert(2, 3) print(l) # [1, 2, 3, 4] # 3. Конкатенация списков print([1, 2, 2] + [4]) # [1, 2, 2, 4]
В результате всех трех операций получается один и тот же список [1, 2, 2, 4]. Но операция append выполняется быстрее всего, поскольку не требует ни обхода списка для вставки элементов в нужное место (как в случае insert), ни создания нового списка на основе двух подсписков (как в случае конкатенации списков). Если не вдаваться в подробности, то операцию insert имеет смысл использовать только для добавления элемента в конкретное место списка, причем не в конце, а конкатенацию - для конкатенации двух списков произвольной длины. Обратите внимание, что существует и четвертый метод, extend(). Он служит для добавления в конец списка нескольких элементов сразу наиболее эффективным способом.
Элемент x можно легко удалить из списка с помощью метода remove(x) списка:
l = [1, 2, 2, 4] l.remove(1) print(l) # [2, 2, 4]
Этот метод работает с самим объектом списка, а не создает новый, измененный список. В предыдущем примере кода мы создали объект списка l и удалили из него элемент. Такой подход не требует избыточных копий данных списка, позволяя экономить память.
На следующем шаге мы закончим изучение этого вопроса.