Список — структура данных, предназначенная для хранения упорядоченных наборов элементов. Слово «упорядоченные» в этом случае означает, что элементы структуры хранятся в том порядке, в котором они были добавлены.
Элементы списка индексированы, то есть имеют порядковый номер. Нумерация всегда начинается с нуля и всегда монотонна. Это значит, что у каждого последующего элемента индекс возрастает на единицу — такую нумерацию еще называют сквозной. При удалении элементов из начала или середины списка, а также при вставке элементов в середину, индексы пересчитываются и указанные выше свойства нумерации сохраняются.
Список в Python – это структура данных для хранения последовательности, состоящей из чисел, строк, отдельных символов. Такие последовательности могут быть как однородными (состоящими из данных одного типа), так и смешанными:
my_list1 = [1, 2, 3, 4, 5] my_list2 = ['P', 'y', 't', 'h', 'o', 'n'] my_list3 = ['адрес', 'телефон', 'имя'] my_list4 = ['Евгений', 23, 'разработчик', 1.77]
Значения, из которых состоит список, называются элементами списка. К элементам списка можно обращаться по индексам (нумерация, как и в случае со строками, всегда начинается с 0), отрицательная нумерация также поддерживается:
>>> my_lst = ['P', 'y', 't', 'h', 'o', 'n'] >>> print(my_lst[2]) t >>> print(my_lst[-3]) h
Как и при работе со строками, для операций со списками можно использовать срезы:
>>> lst = [1, 3, 2, 4, 5] >>> print(lst[::-1]) [5, 4, 2, 3, 1] >>> print(lst[1:4]) [3, 2, 4]
Списки аналогичны массивам в других языках программирования. Списки бывают одномерными и многомерными – на практике чаще всего встречаются двумерные (матрицы):
matrix = [[2, 4, 6, 8, 10], [3, 6, 9, 12, 15], [4, 8, 12, 16, 20]] matrix2 = [[12, 14, 16, 18, 10], [13, 16, 19, 12, 15], [14, 18, 12, 16, 20]]
Индексация элементов в многомерных списках аналогична математической – за исключением того, что нумерация начинается с 0, а не с 1. Для обращения к нужному элементу необходимо указать номер столбца и строки:
>>> lst = [[1, 3, 2], [4, 5, 6], [7, 8, 9], [2, 1, 8], [7, 3, 4]] >>> print(lst[2][2]) 9
Для сложных математических операций с многомерными массивами обычно используют специальную библиотеку NumPy.
Есть несколько способов создать список – данные можно ввести вручную, сгенерировать, преобразовать из какого-либо другого типа с помощью встроенных функций list() или split(). Рассмотрим все эти способы подробнее.
Первый способ: указание значений списка вручную
Список с данными создается простым перечислением нужных значений в квадратных скобках []
:
num_list = [5, 15, 25, 0, 6] symb_list = ['a', 'b', 'c', 'd']
Для создания пустого списка достаточно объявить его название и указать на тип с помощью квадратных скобок или встроенной функции list():
spisok = [] my_lst = list()
Второй способ: преобразование других типов данных в список
Уже упомянутая функция list() позволяет преобразовать строку в список:
>>> my_lst = list('Python') >>> print(my_lst) ['P', 'y', 't', 'h', 'o', 'n']
При этом list() можно комбинировать с другими функциями. Так можно разделить вводимую строку на отдельные символы:
>>> sp = list(input()) Я изучаю Python >>> print(sp) ['Я', ' ', 'и', 'з', 'у', 'ч', 'а', 'ю', ' ', 'P', 'y', 't', 'h', 'o', 'n']
Во многих случаях для преобразования строки в список достаточно split():
>>> sp = 'Разработка ПО на языке Python'.split() >>> print(sp) ['Разработка', 'ПО', 'на', 'языке', 'Python']
С помощью split() можно разбить строку по определенным разделителям – по умолчанию это пробел:
>>> sp = input().split() Я изучаю методы списков >>> print(sp) ['Я', 'изучаю', 'методы', 'списков']
Разделитель, отличный от пробела, указывают в одинарных или двойных кавычках:
>>> lst = input().split(';') номер;модель;цена;количество >>> print(lst) ['номер', 'модель', 'цена', 'количество']
Использование strip() обеспечивает удаление ненужных пробелов в начале и конце строки, а map() применяет нужную функцию ко всем элементам списка. В приведенном ниже примере map() применяет int() к каждому символу строки, преобразовывая строковые символы в целые числа:
>>> my_lst = list(map(int, input().strip().split())) 3 4 5 2 3 4 5 6 1 2 8 >>> print(my_lst) [3, 4, 5, 2, 3, 4, 5, 6, 1, 2, 8]
Третий способ: генерация списков
При необходимости список можно сгенерировать. Самый простой метод – использовать встроенную функцию range(), которая обеспечит автоматическое создание списка, включающего значения из определенного диапазона:
>>> my_lst = list(range(5)) >>> print(my_lst) [0, 1, 2, 3, 4] >>> my_lst = list(range(1, 25, 2)) >>> print(my_lst) [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23]
Другой метод генерации списка – использование list comprehension (списковое включение). В приведенном ниже примере список создается из четных чисел, входящих в определенный диапазон:
>>> my_lst = [i for i in range(1, 51) if i % 2 == 0] >>> print(my_lst) [2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50]
А здесь список составляется из чисел, возведенных в квадрат:
>>> sqr = [i ** 2 for i in range(20)] >>> print(sqr) [0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289, 324, 361]
Поскольку списковые включения позволяют создавать списки по определенным правилам и условиям, их часто используют в качестве компактной замены циклов for и условий if, которые мы будем рассматривать позже:
>>> my_str = '6emds83mmsad99342n42ld9xm37vn4820' >>> my_lst2 = [i for i in my_str if i.isnumeric()] >>> print(my_lst2) ['6', '8', '3', '9', '9', '3', '4', '2', '4', '2', '9', '3', '7', '4', '8', '2',
Предыдущий разделСледующий раздел