
Лекция.
Списки. Словари. Кортежи. Множества
Преподаватель:
Фартышев Дмитрий Александрович

Коллекции
Коллекция в Python — программный объект (переменная-контейнер), хранящая набор значений одного или различных типов, позволяющий обращаться к этим значениям, а также применять специальные функции и методы, зависящие от типа коллекции.

Коллекции
Контейнерные типы данных позволяют нам хранить и получать доступ к значениям удобным способом. Как правило, мы используем списки, кортежи и словари. Но при работе со структурированными данными нам нужны более умные объекты.

Введение в списки
Определение 1: Список – это структура данных, позволяющая хранить и обрабатывать множество однотипных и/или логически связанных данных.
Определение 2: Список – это последовательность элементов, пронумерованных от 0, как символы в строке.
В большинстве языков программирования списки называются массивами
![Создание списка Чтобы создать список, нужно перечислить его элементы через запятую в квадратных скобках: numbers = [2, 4, 6] languages = ['Python', 'C#', 'C++', 'Java'] Список numbers состоит из 3 элементов Список languages состоит из 4 элементов numbers[0] == 2 numbers[1] == 4 numbers[2] == 6 languages[0] == 'Python' languages[1] == 'C#' languages[2] == 'C++' languages[3] == 'Java' Значения, заключенные в квадратные скобки и отделенные запятыми, называются элементами списка](http://fsd.mir-olymp.ru/html/2025/02/22/i_67b9d974b9668/img_phpameobM_-5_4.jpg)
Создание списка
Чтобы создать список, нужно перечислить его элементы через запятую в квадратных скобках:
numbers = [2, 4, 6]
languages = ['Python', 'C#', 'C++', 'Java']
Список numbers состоит из 3 элементов
Список languages состоит из 4 элементов
numbers[0] == 2
numbers[1] == 4
numbers[2] == 6
languages[0] == 'Python'
languages[1] == 'C#'
languages[2] == 'C++'
languages[3] == 'Java'
Значения, заключенные в квадратные скобки и отделенные запятыми, называются элементами списка
![Создание списка Список может содержать значения разных типов данных: info = ['Timur', 1992, 61.5] Список info содержит строковое значение, целое число и число с плавающей точкой. info[0] == 'Timur' info[1] == 1992 info[2] == 61.5 Обычно элементы списка имеют одинаковый тип данных](http://fsd.mir-olymp.ru/html/2025/02/22/i_67b9d974b9668/img_phpameobM_-5_5.jpg)
Создание списка
Список может содержать значения разных типов данных:
info = ['Timur', 1992, 61.5]
Список info содержит строковое значение, целое число и число с плавающей точкой.
info[0] == 'Timur'
info[1] == 1992
info[2] == 61.5
Обычно элементы списка имеют одинаковый тип данных
![Пустой список Создать пустой список можно двумя способами: Использовать пустые квадратные скобки [ ] Использовать встроенную функцию, которая называется list() mylist = [ ] # пустой список mylist = list() # пустой список](http://fsd.mir-olymp.ru/html/2025/02/22/i_67b9d974b9668/img_phpameobM_-5_6.jpg)
Пустой список
Создать пустой список можно двумя способами:
- Использовать пустые квадратные скобки [ ]
- Использовать встроенную функцию, которая называется list()
mylist = [ ] # пустой список
mylist = list() # пустой список
![Вывод списка Для вывода всего списка можно применить функцию print() : numbers = [2, 4, 6, 8, 10] languages = ['Python', 'C#', 'C++', 'Java'] print(numbers) print(languages) Функция print() выводит на экран элементы списка, в квадратных скобках, разделенные запятыми: [2, 4, 6, 8, 10] ['Python', 'C#', 'C++', 'Java']](http://fsd.mir-olymp.ru/html/2025/02/22/i_67b9d974b9668/img_phpameobM_-5_7.jpg)
Вывод списка
Для вывода всего списка можно применить функцию print() :
numbers = [2, 4, 6, 8, 10]
languages = ['Python', 'C#', 'C++', 'Java']
print(numbers)
print(languages)
Функция print() выводит на экран элементы списка, в квадратных скобках, разделенные запятыми:
[2, 4, 6, 8, 10]
['Python', 'C#', 'C++', 'Java']
![Встроенная функция list() Python имеет встроенную функцию list(), которая помимо создания пустого списка может преобразовывать некоторые типы объектов в списки: numbers = list(range(5)) even _ numbers = list(range(0, 10, 2)) chars = list('abcde') numbers = [0, 1, 2, 3, 4] even _ numbers = [0, 2, 4, 6, 8] chars = ['a', 'b', 'c', 'd', 'e']](http://fsd.mir-olymp.ru/html/2025/02/22/i_67b9d974b9668/img_phpameobM_-5_8.jpg)
Встроенная функция list()
Python имеет встроенную функцию list(), которая помимо создания пустого списка может преобразовывать некоторые типы объектов в списки:
numbers = list(range(5))
even _ numbers = list(range(0, 10, 2))
chars = list('abcde')
numbers = [0, 1, 2, 3, 4]
even _ numbers = [0, 2, 4, 6, 8]
chars = ['a', 'b', 'c', 'd', 'e']

Работа со списками
Работа со списками очень сильно напоминает работу со строками, поскольку и списки и строки содержат отдельные элементы:
- элементы списка могут иметь произвольный тип;
- элементами строк всегда являются символы.
Большинство функционала доступного при работе со строками, также доступно и при работе со списками.

Работа со списками
- функция len() для подсчета длины списка;
- оператор принадлежности in ;
- Индексация (обращение по индексу);
- срезы (подсписки исходных списков);
- операция конкатенации и умножения на число;
- функции min() и max().
Различия списков и строк
- списки изменяемы, иногда их называют мутирующими коллекциями (строки неизменяемы);
- функция sum(), находящая сумму элементов списка, отсутствует у строк.
![Методы списков Статически созданные списки: Динамически созданные списки: friends = ['Rosy', 'Daniel', 'Gvido', 'Olga'] numbers = [1, 5, 19, 34] best _ friends = [ ] # список лучших друзей name1, name2, name3 = input(), input(), input() best _ friends.append(name1) best _ friends.append(name2) best _ friends.append(name3) friends = ['Vasily', 'Anton'] # список друзей friends.extend(best _ friends)](http://fsd.mir-olymp.ru/html/2025/02/22/i_67b9d974b9668/img_phpameobM_-5_11.jpg)
Методы списков
Статически созданные списки:
Динамически созданные списки:
friends = ['Rosy', 'Daniel', 'Gvido', 'Olga']
numbers = [1, 5, 19, 34]
best _ friends = [ ] # список лучших друзей
name1, name2, name3 = input(), input(), input()
best _ friends.append(name1)
best _ friends.append(name2)
best _ friends.append(name3)
friends = ['Vasily', 'Anton'] # список друзей
friends.extend(best _ friends)
![Вывод списка Для вывода всего списка можно применить функцию print(): Функция print() выводит на экран элементы списка, в квадратных скобках, разделенные запятыми: numbers = [2, 4, 6, 8, 10] languages = ['Python', 'C#', 'C++', 'Java'] print(numbers) print(languages) [2, 4, 6, 8, 10] ['Python', 'C#', 'C++', 'Java']](http://fsd.mir-olymp.ru/html/2025/02/22/i_67b9d974b9668/img_phpameobM_-5_12.jpg)
Вывод списка
Для вывода всего списка можно применить функцию print():
Функция print() выводит на экран элементы списка, в квадратных скобках, разделенные запятыми:
numbers = [2, 4, 6, 8, 10]
languages = ['Python', 'C#', 'C++', 'Java']
print(numbers)
print(languages)
[2, 4, 6, 8, 10]
['Python', 'C#', 'C++', 'Java']
![Вывод списка Отличается ли вывод списка от вывода содержимого строки? s = '012345' for i in range(len(s)): print(s[i]) numbers = [0, 1, 2, 3, 4, 5] for i in range(len(numbers)): print(numbers[i]) numbers = [0, 1, 2, 3, 4, 5] for num in numbers: print(num) s = '012345' for c in s: print(c)](http://fsd.mir-olymp.ru/html/2025/02/22/i_67b9d974b9668/img_phpameobM_-5_13.jpg)
Вывод списка
Отличается ли вывод списка от вывода содержимого строки?
s = '012345'
for i in range(len(s)):
print(s[i])
numbers = [0, 1, 2, 3, 4, 5]
for i in range(len(numbers)):
print(numbers[i])
numbers = [0, 1, 2, 3, 4, 5]
for num in numbers:
print(num)
s = '012345'
for c in s:
print(c)
![Строковый метод split Метод split() разбивает строку на слова, используя в качестве разделителя последовательность пробельных символов. s = 'Python is the most powerful language' words = s.split() print(words) ['Python', 'is', 'the', 'most', 'powerful', 'language']](http://fsd.mir-olymp.ru/html/2025/02/22/i_67b9d974b9668/img_phpameobM_-5_14.jpg)
Строковый метод split
Метод split() разбивает строку на слова, используя в качестве разделителя последовательность пробельных символов.
s = 'Python is the most powerful language'
words = s.split()
print(words)
['Python', 'is', 'the', 'most', 'powerful', 'language']
![Строковый метод split У метода split() есть необязательный параметр, который определяет, какой набор символов будет использоваться в качестве разделителя между элементами списка. ip = '192.168.1.24' numbers = ip.split('.') # указываем явно разделитель print(numbers) ['192', '168', '1', '24']](http://fsd.mir-olymp.ru/html/2025/02/22/i_67b9d974b9668/img_phpameobM_-5_15.jpg)
Строковый метод split
У метода split() есть необязательный параметр, который определяет, какой набор символов будет использоваться в качестве разделителя между элементами списка.
ip = '192.168.1.24'
numbers = ip.split('.') # указываем явно разделитель
print(numbers)
['192', '168', '1', '24']
![Строковый метод join Метод join() собирает строку из элементов списка, используя в качестве разделителя строку, к которой применяется метод. Списочные выражения squares = [] for i in range(1, 11): numbers.append(i * i) [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]](http://fsd.mir-olymp.ru/html/2025/02/22/i_67b9d974b9668/img_phpameobM_-5_16.jpg)
Строковый метод join
Метод join() собирает строку из элементов списка, используя в качестве разделителя строку, к которой применяется метод.
Списочные выражения
squares = []
for i in range(1, 11):
numbers.append(i * i)
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
![Списочные выражения Общий вид списочного выражения следующий: [выражение for переменная in последовательность]](http://fsd.mir-olymp.ru/html/2025/02/22/i_67b9d974b9668/img_phpameobM_-5_17.jpg)
Списочные выражения
Общий вид списочного выражения следующий:
[выражение for переменная in последовательность]
- переменная — имя некоторой переменной;
- последовательность — последовательность значений (список, строка);
- выражение — некоторое выражение, как правило, зависящее от использованной в списочном выражении переменной, которым будут заполнены элементы списка.

Встроенные функции для списков Python
len() – возвращает длину списка
sorted()– Возвращает отсортированный список
min() и max() – Возвращают наименьший и наибольший элемент списка

Списочные методы
- Метод append() добавляет один элемент в список
- Метод extend() расширяет список другим списком
- Метод insert() вставляет новый элемент в список
- Метод index() находит индекс переданного элемента
- Метод remove() удаляет элемент из списка по его значению
- Метод reverse() меняет порядок списка на обратный
- Метод count() подсчитывает количество определенных элементов в списке
- Метод sort() упорядочивает список по возрастанию или убыванию
- Оператор del позволяет удалять элементы списка по определенному индексу.

Списки

Списочные методы
append() – добавляет новый элемент в конец списка
extend() – добавляет набор элементов в конец списка
insert() – добавляет новый элемент по индексу

Списочные методы
remove() – удаляет элемент из списка
clear() – удаляет все элементы из списка и делает его пустым
index() – возвращает индекс элемента списка

Списочные методы
pop() – удаляет по индексу и возвращает его как результат
count() – считает, сколько раз элемент повторится в списке
sort() – сортирует список
Если нужно отсортировать в обратном порядке – от большего к меньшему, то в методе есть параметр reverse

Списочные методы
reverse() – переставляет элементы в обратном порядке
copy() – копирует список

Введение в кортежи
Списки – изменяемые коллекции, строки – неизменяемые последовательности Unicode символов.
В Python имеются и неизменяемые последовательности содержащие, в отличие от строк, абсолютно произвольные данные. Такие коллекции называются кортежами.
![Кортежи Кортежи по своей природе (задумке) – неизменяемые аналоги списков . Поэтому программный код: my _ tuple = (1, 2, 3, 4, 5) my _ tuple[0] = 9 my _ tuple[4] = 7 print(my _ tuple) приводит к ошибке Кортеж (tuple) – ещё один вид коллекций в Python. Похож на список, но, в отличие от списка, неизменяемый.](http://fsd.mir-olymp.ru/html/2025/02/22/i_67b9d974b9668/img_phpameobM_-5_26.jpg)
Кортежи
Кортежи по своей природе (задумке) – неизменяемые аналоги списков . Поэтому программный код:
my _ tuple = (1, 2, 3, 4, 5)
my _ tuple[0] = 9
my _ tuple[4] = 7
print(my _ tuple)
приводит к ошибке
Кортеж (tuple) – ещё один вид коллекций в Python. Похож на список, но, в отличие от списка, неизменяемый.

- в переменной empty _ tuple хранится пустой кортеж;
- в переменной point хранится кортеж, состоящий из двух вещественных чисел (такой кортеж удобно использовать для представления точки на координатной плоскости);
- в переменной names хранится кортеж, содержащий три строковых значения;
- в переменной info содержится кортеж, содержащий 66 элементов разного типа (строки, числа, булевы переменные);
- в переменной nested _ tuple содержится кортеж, содержащий другой кортеж и список.
Примеры кортежей
empty _ tuple = ()
point = (1.5, 6.0)
names = ('Timur', 'Ruslan', 'Roman')
info = ('Timur', 'Guev', 28, 170, 60, False)
nested _ tuple = (('one', 'two'), ['three', 'four'])
Кортежи могут хранить и содержать в себе объекты любых типов (даже составных) и поддерживают неограниченное количество уровней вложенности.

Зачем использовать кортеж вместо списка?
- скорость – кортежи быстрее работают, так как из-за неизменяемости хранятся в памяти иначе, и операции с их элементами выполняются заведомо быстрее, чем с компонентами списка. Одна из причин существования кортежей – производительность. Обработка кортежа выполняется быстрее, чем обработка списка, поэтому кортежи удобны для обработки большого объема неизменных данных.
- безопасность – неизменяемость превращает их в идеальные константы. Заданные кортежами константы делают код более читаемым и безопасным. Кроме того, в кортеже можно безопасно хранить данные, не опасаясь, что они будут случайно или преднамеренно изменены в программе.
![Функция tuple() Встроенная функция list() может применяться для преобразования кортежа в список. Встроенная функция tuple() может применяться для преобразования списка в кортеж. str _ list = ['один', 'два', 'три'] str _ tuple = tuple(str _ list) print(str _ tuple) выводит: ('один', 'два', 'три')](http://fsd.mir-olymp.ru/html/2025/02/22/i_67b9d974b9668/img_phpameobM_-5_29.jpg)
Функция tuple()
Встроенная функция list() может применяться для преобразования кортежа в список.
Встроенная функция tuple() может применяться для преобразования списка в кортеж.
str _ list = ['один', 'два', 'три']
str _ tuple = tuple(str _ list)
print(str _ tuple)
выводит:
('один', 'два', 'три')

Особенности кортежей
Кортежи поддерживают те же операции, что и списки, за исключением изменяющих содержимое.
Кортежи поддерживают:
- доступ к элементу по индексу (только для получения значений элементов);
- методы, в частности index(), count();
- встроенные функции, в частности len(), sum(), min() и max();
- срезы;
- оператор принадлежности in;
- операторы конкатенации (+) и повторения (*).

Введение в множества
Множество – структура данных, организованная так же, как математические множества.
Важно знать:
- все элементы множества различны (уникальны), два элемента не могут иметь одинаковое значение;
- множества неупорядочены, то есть элементы не хранятся в каком-то определенном порядке;
- элементы множества должны относиться к неизменяемым типам данных;
- хранящиеся в множестве элементы могут иметь разные типы данных.

Создание множества
Чтобы создать множество, нужно перечислить его элементы через запятую в фигурных скобках:
Множество numbers состоит из 5 элементов, и каждый из них — целое число .
Множество languages состоит из 4 элементов, каждый из которых — строка .
Множества могут содержать значения разных типов данных :
numbers = {2, 4, 6, 8, 10}
languages = {'Python', 'C#', 'C++', 'Java'}
info = {'Timur', 1992, 61.5}

Пустое множество
Создать пустое множество можно с помощью встроенной функции, которая называется set():
Обратите внимание — создать пустое множество с помощью пустых фигурных скобок нельзя:
С помощью пустых фигурных скобок создаются словари, так сложилось исторически, словари появились в Python раньше, чем множества.
myset = set() # пустое множество
myset = {} # создается словарь
![Примечания Приведенный ниже код приводит к ошибке: Однако приведенный ниже код работает как полагается: myset1 = {1, 2, [5, 6], 7} # множество не может содержать список myset2 = {1, 2, {5, 6}, 7} # множество не может содержать множество myset = {1, 2, (5, 6), 7} # множество может содержать кортеж](http://fsd.mir-olymp.ru/html/2025/02/22/i_67b9d974b9668/img_phpameobM_-5_34.jpg)
Примечания
Приведенный ниже код приводит к ошибке:
Однако приведенный ниже код работает как полагается:
myset1 = {1, 2, [5, 6], 7} # множество не может содержать список
myset2 = {1, 2, {5, 6}, 7} # множество не может содержать множество
myset = {1, 2, (5, 6), 7} # множество может содержать кортеж

Операции над множествами
Основные операции над множествами:
- объединение множеств;
- пересечение множеств;
- разность множеств;
- симметрическая разность множеств.
Для каждой операции есть метод и оператор.

Объединение множеств: метод union()
Объединение множеств это множество, состоящее из элементов, принадлежащих хотя бы одному из объединяемых множеств. Для этой операции существует метод union().
myset1 = {1, 2, 3, 4, 5}
myset2 = {3, 4, 6, 7, 8}
myset3 = myset1.union(myset2)
print(myset3)
{1, 2, 3, 4, 5, 6, 7, 8}
Можно использовать “|”

Пересечение множеств: метод intersection()
Пересечение множеств это множество, состоящее из элементов, принадлежащих одновременно каждому из пересекающихся множеств. Для этой операции существует метод intersection().
myset1 = {1, 2, 3, 4, 5}
myset2 = {3, 4, 6, 7, 8}
myset3 = myset1.intersection(myset2)
print(myset3)
{3, 4}
Можно использовать “&”

Разность множеств: метод difference()
Разность множеств это множество, в которое входят все элементы первого множества, не входящие во второе множество. Для этой операции существует метод difference().
myset1 = {1, 2, 3, 4, 5}
myset2 = {3, 4, 6, 7, 8}
myset3 = myset1.difference(myset2)
print(myset3)
{1, 2, 5}
Можно использовать “-”

Введение в словари
Словари – изменяемые коллекции элементов с произвольными индексами – ключами. Если в списках элементы индексируются целыми числами, начиная с 0, то в словарях — любыми ключами, в том числе в виде строк.
Чтобы создать словарь, нужно перечислить его элементы, пары ключ—значение, через запятую в фигурных скобках, как и элементы множества. Первым указывается ключ, после двоеточия — значение, доступное в словаре по этому ключу.
Создание словаря
Словарь — реализация структуры данных "ассоциативный массив" или "хеш таблица"
![Введение в словари languages = ['Python', 'C#', 'Java', 'C++'] print(languages[0]) print(languages[2]) Python Java Словарь — реализация структуры данных](http://fsd.mir-olymp.ru/html/2025/02/22/i_67b9d974b9668/img_phpameobM_-5_40.jpg)
Введение в словари
languages = ['Python', 'C#', 'Java', 'C++']
print(languages[0])
print(languages[2])
Python
Java
Словарь — реализация структуры данных "ассоциативный массив" или "хеш таблица"

Примечания
Примечание 1. Словари принципиально отличаются от списков по структуре хранения в памяти. Список — последовательная область памяти, то есть все его элементы (указатели на элементы) действительно хранятся в указанном порядке, расположены последовательно. Благодаря этому и можно быстро «прыгнуть» к элементу по его индексу. В словаре же используется специальная структура данных — хеш-таблица. Она позволяет вычислять числовой хеш от ключа и использовать обычные списки, где в качестве индекса элемента берется этот хеш.
Примечание 2. В рамках одного словаря каждый ключ уникален.
Примечание 3. Словари удобно использовать для хранения различных сущностей. Например, если нужно работать с информацией о человеке, то можно хранить все необходимые сведения, включающие такие разные сущности как "возраст", "профессия", "название города", "адрес электронной почты" в одном словаре info и легко обращаться к его элементам по ключам:
info = {'name': 'Timur',
'age': 28,
'job': 'Teacher',
'city': 'Moscow',
'email': 'timyr-guev@yandex.ru'}
print(info['name'])
print(info['email'])
![Примечания Примечание 4. Создать словарь на основании двух списков (кортежей) можно с помощью встроенной функции-упаковщика zip(), о которой расскажем позже. выводит (порядок элементов может отличаться): keys = ['name', 'age', 'job'] values = ['Timur', 28, 'Teacher'] info = dict(zip(keys, values)) print(info) {'name': 'Timur', 'age': 28, 'job': 'Teacher'}](http://fsd.mir-olymp.ru/html/2025/02/22/i_67b9d974b9668/img_phpameobM_-5_42.jpg)
Примечания
Примечание 4. Создать словарь на основании двух списков (кортежей) можно с помощью встроенной функции-упаковщика zip(), о которой расскажем позже.
выводит (порядок элементов может отличаться):
keys = ['name', 'age', 'job']
values = ['Timur', 28, 'Teacher']
info = dict(zip(keys, values))
print(info)
{'name': 'Timur', 'age': 28, 'job': 'Teacher'}

Пустой словарь
Пустой словарь можно создать двумя способами:
- с помощью пустых фигурных скобок;
- с помощью функции dict().
Вывод словаря
languages = {'Python': 'Гвидо ван Россум',
'C#': 'Андерс Хейлсберг',
'Java': 'Джеймс Гослинг'}
info = dict(name = 'Timur', age = 28, job = 'Teacher')
print(languages)
print(info)

Примечания
Примечание 1. Обращение по индексу и срезы недоступны для словарей.
Примечание 2 . Операция конкатенации + и умножения на число * недоступны для словарей.
Примечание 3. Словари нужно использовать в следующих случаях:
Подсчет числа каких-то объектов. В этом случае нужно завести словарь, в котором ключи — названия объектов, а значения — их количество.
Хранение каких-либо данных, связанных с объектом. Ключи — наименования объектов, значения — связанные с ними данные. Например, если нужно по названию месяца определить его порядковый номер, то это можно сделать при помощи словаря num = {'January': 1, 'February': 2, 'March': 3, ...}.
Установка соответствия между объектами (например, “родитель—потомок”). Ключ — объект, значение — соответствующий ему объект.
Если нужен обычный список, где максимальное значение индекса элемента очень велико, но при этом используются не все возможные индексы (так называемый “разреженный список”), то для экономии памяти можно использовать словарь.

Методы словарей
Словари как и списки имеют много полезных методов для упрощения работы с ними и решения повседневных задач. В прошлом уроке, мы уже познакомились с тремя словарными методами:
- метод items() – возвращает словарные пары ключ: значение, как соответствующие им кортежи;
- метод keys() – возвращает список ключей словаря;
- метод values() – возвращает список значений словаря.

Хеш-функция
hash() - это не метод, а встроенная функция. Она принимает объект и возвращает его хеш. Хеши используются для быстрого сравнения ключей словаря во время поиска по нему. Хеш - это результат хеширования, т.е. операции по преобразованию данных в строку или число фиксированной длины. В Pyhton хеш - это целые числа. Два одинаковых объекта должны иметь одинаковый хеш, но обратное не обязательно верно.

Спасибо за внимание!