Знакомства со списками
Мы уже знаем тип данных, который называется множество и является коллекцией (контейнером), то есть позволяет хранить несколько элементов данных, и тип, который тоже обладает свойствами коллекции и называется строка. Сегодня мы познакомимся с еще одним типом-коллекцией, который называется список (list). Никогда не создавайте переменные с таким именем!
Имеет смысл еще раз задать вопрос учащимся, что будет, если все-таки создать переменную с именем list
(повторение — мать учения :) ). И при необходимости пояснить, что в этом случае функция list
нам больше не будет доступна, т. к. мы заменили ее своей переменной.
Списки являются очень гибкой структурой данных и широко используются в программах. Давайте рассмотрим основные свойства списка в сравнении с теми коллекциями, которые мы уже знаем:
Список хранит несколько элементов под одним именем (как и множество)
Элементы списка могут повторяться (в отличие от множества)
Элементы списка упорядочены и проиндексированы, доступна операция среза (как в строке)
Элементы списка можно изменять (в отличие от строки)
Элементами списка могут быть значения любого типа: целые и действительные числа, строки и даже другие списки
Создание списков
Чтобы работать со списком, нужно его создать. Для этого используется операция присваивания. Чтобы задать готовый список, нужно справа от знака присваивания в квадратных скобках перечислить его элементы через запятую. Здесь создается список из первых пяти простых чисел, который помещается в переменную primes
(«простые числа»):
Для того чтобы создать пустой список, можно воспользоваться конструкцией []
или функцией list
.
Теперь вспомним один из рассмотренных нами ранее способов создания cтроки из заданного количества повторяющихся подстрок. Такую строку можно легко составить путем умножения на число:
Аналогично поступают и со списками:
Для генерации списков и строк, состоящих строго из повторяющихся элементов (например, список из заданного количества нулей), умножение на число — самый короткий и красивый метод.
Индексация в списках
Для генерации списков и строк, состоящих строго из повторяющихся элементов (например, список из заданного количества нулей), умножение на число — самый короткий и красивый метод.
Чтобы получить отдельный элемент списка, нужно записать после него (или имени переменой, связанной с данным списком) в квадратных скобках номер (индекс) нужного элемента. Индекс отсчитывается с нуля, как в строках. Так же, как и в строках, для нумерации с конца разрешены отрицательные индексы.
Таким образом, мы умеем использовать квадратные скобки в Python уже для трех вещей: задания нового списка (тогда внутри этих скобок перечисляются его элементы), получения элемента списка или строки по индексу (тогда в скобках указывается индекс) и получения среза строки.
Как и в строках, попытка обратиться к элементу с несуществующим индексом вызовет ошибку:
Добавление элемента в список
Добавление элемента в конец списка делается при помощи метода append
(этот метод аналогичен методу add
, используемому для добавления элементов в множество):
Обратите внимание: для того чтобы воспользоваться методом append
, нужно, чтобы список был создан (при этом он может быть пустым).
Попытка применить метод append
к несуществующему списку приведет к ошибке. Заметьте: два вызова метода append в следующем примере добавляют элемент к двум разным спискам.
Расширение списка
Кроме того, вы можете расширить имеющийся список любым итерабельным (перечисляемым) объектом с помощью метода extend
:
Расширение списка строкой
Имейте в виду, что строка является итерируемой, поэтому, если вы расширите список строкой, вы добавите каждый символ, когда будете перебирать строку (что может быть не так, как вы хотите):
Расширение списка множеством
Множество также является итерируемым типом, поэтому если расширить список множеством, то элементы множества добавятся в конец списка, но в произвольном порядке:
Изменение элемента списка
В отличие от отдельных символов в строках, элемент списка можно поместить слева от " = " в операторе присваивания и тем самым изменить этот элемент:
Тем не менее многие вещи, которые можно делать со строками, можно делать и со списками:
Перебор элементов списка
Во время выполнения программы текущее количество элементов списка всегда известно. Поэтому, если нужно что-то сделать с каждым элементом списка (например, напечатать его на экране), можно перебрать элементы с помощью цикла for
. При этом, как и для строк, возможны два варианта перебора — перебор индексов и перебор самих элементов.
Заметьте, что при использовании конструкции for i in range(len(имя_списка))
индексы перебираются в цикле очень удобно: от 0 включительно до длины списка не включительно. Таким образом, можно перебрать все элементы списка.
Цикл for
нередко используется и для формирования списка, если мы заранее знаем, сколько элементов в нем должно быть:
Срезы списков
Как и для строк, для списков определена операция взятия среза:
Использование срезов
Срезы можно использовать и для присваивания новых значений элементам списка. Например, если мы решим перевести на английский названия летних месяцев, это можно сделать с помощью среза:
Теперь список months
будет выглядеть так:
Удаление элементов
С помощью функции del
можно удалять элементы списка.
Элемент под указанным индексом удаляется, а список перестраивается.
Функция del
работает и со срезами: например, так можно удалить все элементы на четных позициях исходного списка:
Списки и массивы
Во многих языках программирования (да и в самом Python, в недрах стандартной библиотеки) имеется другой тип данных с похожими свойствами — массив. Поэтому списки иногда называют массивами, хоть это и не совсем правильно.