Списки, словари, кортежи, множества — создание, доступ к элементам, базовые операции.
Содержание:
Индексы в питоне
Методы и функции в пайтон
Коллекции данных
Оператор in в Python
Практика
Индексы в питоне
Note
В Python индекс – это число, которое указывает позицию элемента в последовательности, такой как строка, список или кортеж. Индексы позволяют обращаться к конкретным элементам последовательности. Нумерация индексов начинается с нуля, что значит, что первый элемент находится на позиции 0, второй — на 1, и так далее.
text = "Python"print(text[0]) # Выведет: 'P'print(text[1]) # Выведет: 'y'
Отрицательные индексы
Отрицательные индексы позволяют обращаться к элементам с конца последовательности. Например, -1 указывает на последний элемент, -2 — на предпоследний и так далее.
text = "Python"print(text[-1]) # Выведет: 'n'print(text[-2]) # Выведет: 'o'
🧪 Практика
Example
в файлике “Python_base”
Задание#1
Нужно протестировать как работают индексы
text = "Написать свой текст"print(text[0]) print(text[1]) Проверить что будет если мы выведем 6 индекс
2 Отрицательные индексы
text = "Написать свой текст"print(text[-1]) # Выведет: 'n'print(text[-2]) # Выведет: 'o'Проверить что будет если мы выведем -6 индекс
Методы и функции в пайтон
Note
Важное уточнение - сейчас будет поверхностное объяснение. Оно необходимо для понимания происходящего, но подробнее функции будут изучаться далее.
Note
Функция или метод — это “инструмент”, который выполняет заранее заданное действие. Чтобы вызвать метод или функцию, нужно написать её имя и указать данные в круглых скобках (еще эти данные называют аргументами или параметрами), если они нужны.
Простой пример:
print() - мы уже не раз пользовались этой функцией - давай выведем основные моменты:
Используется, чтобы что-то вывести на экран.
Данные, которые нужно показать, пишутся в круглых скобках.
Пример:
print("Привет!") # Показывает текст "Привет!"
Note
Почему круглые скобки?
Скобки говорят Python, что нужно выполнить действие.
Если просто написать имя функции без скобок, ничего не произойдёт. Например:
print # Это просто показывает, что функция существует, но не запускает её.print("Привет") # А здесь функция запустится.
Когда мы будем проходить коллекции данных, в примерах и заданиях будут функции и методы отличающиеся от print(), которые надо будет вызвать
Давай разберемся в отличии метода от функции простым языком:
Note
Мы пишем имя функции и передаем внутрь нее аргумент. Этот аргумент может быть текстом/числом/переменной/выражением и тд.
Пример: используемый нами ранее print()
Методы мы будем вызывать для конкретных переменных, это делается через символ .
Давай рассмотрим на примере метод .upper() для типа данных str (string)
text = "текст"text_up = text.upper() # В переменную text_up мы кладем значение метода .upper()print(text_up) # Выведет "ТЕКСТ"
Давай рассмотрим пример еще одной функции - type() - она возвращает тип данных
text = "текст"type_text = type(text)print(type_text)# Программа вернет "<class 'str'>", что означает тип данных string
Warning
Как видишь - метод произвел некоторые манипуляции и выдал результат.
Важно понять - он это сделал не с самой переменной, а результат записал в новую переменную (в примере это text_up или type_text)
Если выведем переменную text - она останется той же самой: “текст”
То есть у метода/функции есть результат выполнения. Пока что нам этого будет достаточно
Практика 🧪
Example
В файлике “Пайтон бейз”
Задание №1:
Сделай несколько переменных с различными типами данных (например int, float, bool)
Выведи результат
Задание №2:
Сделай переменную типа str
Попробуй вывести на экран тип переменной, передав внутрь функции print() функцию type() с аргументом в виде переменной
Коллекции данных
Массивы в Python (Списки) list
Note
Массивов в классическом понимании в Python нет, но есть списки(list), которые выполняют аналогичную функцию — упорядоченную коллекцию элементов.
Для создания списка(list) применяются квадратные скобки [], внутри которых через запятую перечисляются элементы списка. Например, определим список строк
Тип данных список - на английском называется list
Создание списка
fruits = ["яблоко", "банан", "вишня"]
Note
Подобным образом можно определять списки с данными других типов, например, числами:
numbers = [1, 2, 3, 4]
Note
Также для создания списка можно использовать функцию-конструктор list():
numbers1 = []numbers2 = list()'''Оба этих определения списка аналогичны - они создают пустой список'''
Отступление
Здесь следует сделать важное уточнение касательно создания новых списков из уже имеющихся. Если мы используем следующую конструкцию:
numbers1 = [1, 2, 3]numbers2 = numbers1
в таком случае любое изменение numbers1 в последствии так же изменит и numbers2. Пока что запомним, что когда надо сделать новый список из существующего, мы будем использовать метод copy() или list(), например:
numbers1 = [1, 2, 3, 4, 5]numbers2 = numbers1.copy() # копированиеnumbers3 = list(numbers1) # создание на основе первого
Почему так происходит? Разберем в следующем модуле, пока что сфокусируемся на самих списках
Note
Список необязательно должен содержать только однотипные объекты. Мы можем поместить в один и тот же список одновременно строки, числа, объекты других типов данных:
objects = [1, 2.6, "Hello", True]
Note
Для проверки элементов списка можно использовать стандартную функцию print, которая выводит содержимое списка в удобочитаемом виде:
Для обращения к элементам списка надо использовать индексы, которые представляют номер элемента в списке. Индексы начинаются с нуля. То есть первый элемент будет иметь индекс 0, второй элемент - индекс 1 и так далее. Для обращения к элементам с конца можно использовать отрицательные индексы, начиная с -1. То есть у последнего элемента будет индекс -1, у предпоследнего -2 и так далее
people = ["Tom", "Sam", "Bob"]'''получение элементов с начала списка'''print(people[0]) # Tomprint(people[1]) # Samprint(people[2]) # Bob'''получение элементов с конца списка'''print(people[-2]) # Samprint(people[-1]) # Bobprint(people[-3]) # Tom
Note
Для изменения элемента списка достаточно присвоить ему новое значение:
people = ["Tom", "Sam", "Bob"]people[1] = "Mike" # изменение второго элементаprint(people[1]) # Mikeprint(people) # ["Tom", "Mike", "Bob"]
Сравнение списков
Note
Два списка считаются равными, если они содержат один и тот же набор элементов:
• index(item): возвращает индекс элемента item. Если элемент не найден, генерирует исключение ValueError
# indexfruits = ['банан', 'яблоко', 'апельсин']index = fruits.index('апельсин')print(index) # 2###fruits = ['банан', 'яблоко', 'апельсин']index = fruits.index('такого элемента нет в списке')print(index)# ValueError: 'такого элемента нет в списке' is not in list
Example
Повторите это в IDE
Удаление элементов
remove(item): удаляет элемент item. Удаляется только первое вхождение элемента. Если элемент не найден, генерирует исключение ValueError
clear(): удаление всех элементов из списка
pop([index]): удаляет и возвращает элемент по индексу index. Если индекс не передан, то просто удаляет последний элемент (по идее “вытащить” из списка)
Списки кроме стандартных данных типа строк, чисел, также могут содержать другие списки. Подобные списки можно ассоциировать с таблицами, где вложенные списки выполняют роль строк. Например:
Чтобы обратиться к элементу вложенного списка, необходимо использовать пару индексов: fruits[0][1] - обращение ко второму элементу первого вложенного списка
fruits = [ ["яблоко", "розовые"], ["апельсин", "цитрусовые"], ["ананас", "бромелиевые"]]print(fruits[0]) # ["яблоко", "розовые"]print(fruits[0][0]) # яблокоprint(fruits[0][1]) # розовыеfruits = [ ["яблоко", "розовые"], ["апельсин", "цитрусовые"], ["ананас", "бромелиевые"]]# создание вложенного спискаnew_fruit = list()new_fruit.append("банан")new_fruit.append("банановые")# добавление вложенного спискаfruits.append(new_fruit)print(fruits[-1]) # ["банан", "банановые"]# добавление во вложенный списокfruits[-1].append("желтый")print(fruits[-1]) # ["банан", "банановые", "желтый"]# удаление последнего элемента из вложенного спискаfruits[-1].pop()print(fruits[-1]) # ["банан", "банановые"]# удаление всего последнего вложенного спискаfruits.pop(-1)
Example
Повторите это в IDE
🧪 Практическое задание
Example
Задание 1
Есть два списка чисел: a = [1, 2, 3] и b = [4, 5, 6].
Нужно создать новый список c, который объединяет элементы из a и b.
Убедиться, что длина нового списка равна сумме длин списков a и b.
используя операцию сложения списков и метод assert.
Задание 2
Дан список чисел numbers = [10, 20, 40, 50]
Добавить число 30 между 20 и 40
Вывести список при помощи print
Очистить список полностью (удалить все элементы)
Задание 3
Создать список, который содержит три других списка
[1, 2, 3]
["a", "b", "c"]
[True, False]
Извлечь второй элемент второго списка и убедитесь, что это “b”
Удалите последний элемент первого списка и сохранить его в переменной last_item. Проверить, что last_item равен 3
Словари dict
Note
Словарь в Python — это Упорядоченная коллекция элементов, где каждый элемент хранится как пара ключ-значение
Внешне словарь напоминает JSON, но имеет отличия
Note
1️⃣
Форматирование
JSON:
Ключи и строки должны быть в двойных кавычках:{"name": "Alice"} (правильно).{'name': 'Alice'} (неправильно)
Словарь в Python:
Ключи и строки могут быть в одинарных или двойных кавычках:{'name': 'Alice'} или {"name": "Alice"} (оба правильно)
Note
2️⃣
Типы данных
JSON: Поддерживает только базовые типы:
string → строки
number → числа (целые и дробные)
boolean → true, false
null → None в Python
array → списки
object → словари
Словарь в Python:
Помимо типов JSON, может содержать сложные типы Python:
Кортежи (tuple)
Множества (set)
Вложенные объекты Python, функции и тд
— пока что мы это запомним, функции и кортежи со множествами мы рассмотрим в следующих темах
Основные методы работы со словарями
Создание словаря
Note
Определение словаря имеет следующий синтаксис:
dictionary = { ключ1:значение1, ключ2:значение2, ....}
dictionary = {"имя": "Алиса", "возраст": 30}
Note
В фигурных скобках через запятую определяется последовательность элементов, где для каждого элемента сначала указывается ключ и через двоеточие его значение
То есть в словаре dictionary первый ключ “имя” имеет значение “Алиса”, элемент с ключом 2 “возраст” имеет значение 30
Мы можем также вообще определить пустой словарь без элементов:
objects = {}objects = dict()
Tip
Так же как и со списками мы можем скопировать словарь из одного в другой при помощи метода copy()
Получение элементов словаря
Получение значения через ключ
my_dict = { "name": "Alice", "age": 25, "city": "Phuket" }# Получение значения по ключуprint(my_dict["name"]) # Вывод: Aliceprint(my_dict["age"]) # Вывод: 25
С использованием метода get
Note
Метод get позволяет безопасно получить значение. Если ключ отсутствует, можно указать значение по умолчанию get(ключ, значение по умолчанию)
Если значение по умолчанию не задано - вернется None как результат метода get
```python
print(my_dict.get("name")) # Вывод: Alice
print(my_dict.get("country", "USA")) # Вывод: USA (значение по умолчанию)
```
Note
Преимущество get: использование этого метода не вызовет ошибку, если ключ отсутствует.
Если при объединении будет передан ключ который есть в исходном словаре - он будет перезаписан. Как видно на примере значение ключа “age” было перезаписано.
Создай словарь со своими персональными данными (допустим анкету)
который будет содержать имя, возраст, имейл.
Попробуй скопировать его методом copy() в другую переменную
При помощи assert сравни оба словаря и проверь результат работы программы
Задание 2
В созданном раннее словаре добавь новую пару ключ-значение - свой номер телефона
Выведи результат полученный номер телефона в консоль при помощи print()
после этого перезапиши значение этого элемента сделав его отфильтрованным 🍻 (добавь символы * что бы персональные данные были скрыты.
Например: 797*****33
Задание 3
Создать второй словарь, который будет вложенным, где будет находиться информация о твоем месте жительства (можно фейково)
Например:
Объедини списки, добавив в анкету о себе информацию о месте жительства
После этого выведи город (или другой созданный элемент) из вложенного списка который мы добавили к первому
Кортежи tuple
Note
Кортеж — это неизменяемая упорядоченная коллекция элементов. Похож на список, но не позволяет изменять элементы после создания.
Создание кортежа
Note
Для создания кортежа используются круглые скобки, в которые помещаются его значения, разделенные запятыми:
my_tuple = (1, 2, 3)print(my_tuple) # (1, 2, 3)
Note
Также для определения кортежа мы можем просто перечислить значения через запятую без применения скобок:
my_tuple = 1, 2, 3print(my_tuple) # (1, 2, 3)
Note
Если вдруг кортеж состоит из одного элемента, то после единственного элемента кортежа необходимо поставить запятую и убедиться, что переменная имеет тип tuple
После создания кортеж нельзя изменить — нельзя добавлять, удалять или изменять элементы, в отличие от списка. Попытка изменить кортеж приведет к ошибке:
my_tuple = (1, 4, 6)my_tuple[1] = 10
TypeError: 'tuple' object does not support item assignment
🧪 Практика
Example
Сделай кортеж из нескольких элементов
Попробуй удалить элемент кортежа
Попробуй добавить элемент в кортеж с ранее используемыми методами, прочти сообщение об ошибке
Выведи элемент кортежа по индексу с помощью print()
Обращение к элементам кортежа
Note
Обращение к элементам в кортеже происходит также, как и в списке, по индексу. Индексация начинается также с нуля при получении элементов с начала списка и с -1 при получении элементов с конца списка
Кортежи как и списки кроме стандартных данных типа строк, чисел, также могут содержать другие типы данных
Note
Чтобы обратиться к элементу вложенного списка, необходимо использовать пару индексов или индекс и ключ для словарей, например: combined[0]['object'] - обращение к значению элемента objectпервого элемента кортежа
print(combined[0]['object']) # Вывод: in_tuple
Example
Повторите эти операции и выведите в терминал результаты их выполнения
Получение индекса и кол-ва схожих элементов
Note
index: Возвращает индекс первого вхождения элемента:
Несмотря на то, что функция print вывела один раз элемент “яблоко”, хотя в определении множества этот элемент содержится два раза. Все потому что множество содержит только уникальные значения.
И теперь мы разберем - какие же типы данных множество может использовать:
Множества могут содержать только хэшируемые (immutable) объекты. Это означает, что элементы множества должны быть неизменяемыми. Подробнее что это за объекты затронем в теме неизменяемых данных, а пока давай запомним, что внутрь нам следует передавать следующие типы:
int, float, str, tuple
🧪 Практика
Example
Задание №1
Сделай список элементов где 1 из них встретится несколько раз
Сделай из этого списка множество
выведи print() результат
Задание №2
Сделай множество, где один из элементов будет список
Попробуй вывести это множество в консоль при помощи print()
ознакомься с текстом ошибки.
Обращение к элементам множества
Note
Множества (set) в Python не поддерживают доступ к элементам по индексу, так как они неупорядоченные. Это означает, что элементы множества не имеют фиксированных позиций
Тем не менее можно достать эти элементы методом pop() для получения и удаления случайного элемента
Попробуй сделать 2 множества и в новую переменную сделать их объединенную версию
После этого выведи оба множества при помощи print() - убедись, что изначальные множества не изменились
Пересечение множеств
Note
Оператор & или метод intersection() возвращает элементы, которые есть в обоих множествах.
Более простым языком: пересечение множеств позволяет получить только те элементы, которые есть одновременно в обоих множествах
set1 = {1, 2, 3}set2 = {3, 4, 5}intersection_set = set1 & set2 # пример с операторомintersection_set2 = set1.intersection(set2) # пример с методомprint(intersection_set) # Вывод: {3}
Example
Практическое задание :
Попробуй сделать аналогично
А теперь сделай так, чтобы оба множества не содержали одинаковых элементов и попробуй сделать ту же самую операцию - проанализируй вывод результата.
Разность множеств
Note
Оператор - или метод difference() возвращает элементы, которые есть в первом множестве, но отсутствуют во втором
set1 = {1, 2, 3}set2 = {3, 4, 5}difference_set = set1 - set2 # пример через операторdifference_set_1 = set1.difference(set2) # Пример через методprint(difference_set) # Вывод: {1, 2}print(difference_set_1) # Вывод: {1, 2}
Note
Отдельная разновидность разности множеств - симметрическая разность производится с помощью метода symmetric_difference() или с помощью операции ^. Она возвращает все элементы обоих множеств за исключением общих:
set1 = {1, 2, 3}set2 = {3, 4, 5}symmetric_diff = set1 ^ set2 # Пример через операторsymmetric_diff_1 = set1.symmetric_difference(set2) # Пример через методprint(symmetric_diff) # Вывод: {1, 2, 4, 5}print(symmetric_diff_1) # Вывод: {1, 2, 4, 5}
Сравнение множеств (опционально учить не надо)
Множества в Python можно сравнивать с использованием операторов <, <=, >, >=. Эти операторы проверяют, являются ли множества подмножествами или надмножествами друг друга
Подмножество (<, <=):
Множество A является подмножеством множества B, если все элементы A присутствуют в B.
Оператор < проверяет, что A является строгим подмножествомB (должны быть элементы в B, которых нет в A).
Оператор <= проверяет, что A является подмножеством B (включая равенство).
Надмножество (>, >=):
Множество A является надмножеством множества B, если все элементы B присутствуют в A.
Оператор > проверяет, что A является строгим надмножествомB.
Оператор >= проверяет, что A является надмножеством B (включая равенство).
Равенство множеств:
Два множества равны, если содержат одни и те же элементы, независимо от порядка.
Повторить все примеры и получить результаты
Данные операции встречаются редко, нам будет достаточно просто знать о их существовании и возвращать к ним в случае необходимости.
Здесь start не указан, поэтому диапазон начинается с 0 step тоже не указан - поэтому 1
🧪 Практическое задание
Example
Сделай диапазоны, где:
начинается с 2 и заканчивается перед 6
числа увеличиваются на 2 на каждом шаге
идёт в обратном порядке, уменьшая значение на 2 на каждом шаге
то есть с отрицательным шагом
где start диапазона > stop - попробуй преобразовать его в список и ознакомься с результатом
Основные методы работы с диапазонами
Узнать длину диапазона
Ничего нового - все та же функция len()
print(len(range(5, 15, 2))) # Вывод: 5
Если интересно из чего состоит - преобразуй в список и выведи его
Оператор in в Python
Tip
in — это оператор, который проверяет наличие элемента в контейнере. Он работает с различными типами данных, такими как строки, списки, кортежи, множества и словари
При помощи оператора in можно проверить наличие символа или подстроки в строке:
text = "Hello, world!"# Проверяем наличие подстрокиprint("Hello" in text) # Trueprint("world" in text) # Trueprint("Прикол" in text) # False# Проверяем наличие отдельного символаprint("H" in text) # Trueprint("h" in text) # Falseprint("z" in text) # False
Warning
Объяснение
"Hello" in text возвращает True, потому что подстрока "Hello" есть в строке которая хранится в переменнойtext
"z" in text возвращает False, потому что символ "z" отсутствует
"h" in text возвращает False , потому что h не тоже самое, что и H
Поскольку строка содержит символы Unicode, то с помощью функции ord() мы можем получить числовое значение для символа в кодировке Unicode: