Python | Вопросы собесов – Telegram
Python | Вопросы собесов
13.6K subscribers
37 photos
3 videos
1 file
1.17K links
Cайт: easyoffer.ru
Реклама: @easyoffer_adv
ВП: @easyoffer_vp

Тесты t.me/+20tRfhrwPpM4NDQy
Задачи t.me/+nsl4meWmhfQwNDVi
Вакансии t.me/+cXGKkrOY2-w3ZTky
Download Telegram
🤔 Что за функция sleep()?

Функция sleep() из модуля time приостанавливает выполнение программы на заданное количество секунд.

🚩Как использовать `sleep()` в Python?

Функция sleep() принимает один аргумент** — число секунд (может быть дробным).
import time

print("Программа началась...")
time.sleep(3) # Ожидание 3 секунды
print("3 секунды прошло!")


🚩Где используется `sleep()`?

Ожидание в цикле (имитация загрузки)
for i in range(5, 0, -1):
print(i)
time.sleep(1) # Задержка 1 секунда между выводами
print("Старт!")


Запросы к серверу с паузами (чтобы не забанили)
import time
import requests

for i in range(3):
response = requests.get("https://example.com")
print(f"Запрос {i+1}: статус {response.status_code}")
time.sleep(2) # Ждём 2 секунды перед следующим запросом


Искусственная задержка перед повторной попыткой
for attempt in range(3):
print(f"Попытка {attempt + 1}...")
time.sleep(2) # Ожидание 2 секунды перед новой попыткой


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
🤔 Что знаешь про нормализацию?

Это процесс преобразования данных для их корректного использования или улучшения эффективности.
1. В базах данных нормализация устраняет избыточность, разбивая таблицы на логические части для предотвращения дублирования.
2. В обработке данных нормализация часто используется для масштабирования значений, чтобы привести их в единый диапазон (например, от 0 до 1).
3. Она улучшает производительность, точность и удобство работы с данными.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🤔2
🤔 Какие есть виды файловых объектов?

В Python существует несколько типов файловых объектов, которые используются для работы с различными типами данных. Рассмотрим основные виды файловых объектов и их особенности.

🟠Текстовые файлы (`TextIOWrapper`)
Это самый распространённый тип файловых объектов. Такие файлы используются для работы с текстовыми данными и поддерживают строковые операции.
   with open("example.txt", "w", encoding="utf-8") as file:
file.write("Привет, мир!") # Записываем текст в файл

with open("example.txt", "r", encoding="utf-8") as file:
content = file.read() # Читаем текст из файла
print(content)


🟠Бинарные файлы (`BufferedReader`, `BufferedWriter`)
Эти файлы используются для работы с двоичными данными (изображениями, видео, аудиофайлами и т. д.).
   with open("image.jpg", "rb") as file:
binary_data = file.read() # Читаем файл в бинарном режиме
print(binary_data[:10]) # Выведем первые 10 байтов

with open("copy.jpg", "wb") as file:
file.write(binary_data) # Записываем данные в новый файл


🟠Файлы ввода-вывода в памяти (`io.StringIO`, `io.BytesIO`)
Эти объекты представляют собой файловые буферы, которые хранят данные в оперативной памяти, а не на диске.
   from io import StringIO

file = StringIO()
file.write("Привет, мир!") # Запись данных в буфер
file.seek(0) # Перемещаем указатель в начало
print(file.read()) # Читаем данные из буфера


Пример работы с BytesIO:
   from io import BytesIO

file = BytesIO()
file.write(b"Binary data") # Запись бинарных данных
file.seek(0)
print(file.read()) # Чтение данных


🟠Файловые объекты на основе сокетов, пайпов и других источников
Python позволяет работать с файловыми объектами, полученными из нестандартных источников, например, сокетов или каналов связи (pipes).
   import socket

s = socket.socket()
s.connect(("example.com", 80))
s.sendall(b"GET / HTTP/1.1\r\nHost: example.com\r\n\r\n")
response = s.makefile("r", encoding="utf-8") # Создание файлового объекта
print(response.readline()) # Читаем первую строку HTTP-ответа
s.close()


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
🤔 Что возвращает декоратор?

Обычно декоратор возвращает функцию или объект, который будет вызываться вместо оригинальной функции. Это может быть обёртка с дополнительной логикой или модифицированная функция.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
🤔 Какие типы данных относятся к структурам данных?

В Python существует множество структур данных, которые предоставляют различные способы хранения и управления данными. Они делятся на два основных типа: встроенные структуры данных и пользовательские структуры данных (созданные программистом). Встроенные структуры данных предоставляют готовые инструменты для решения большинства задач, а пользовательские разрабатываются вручную для более сложных или специфичных случаев.

🚩Встроенные структуры данных

К ним относятся те типы данных, которые изначально встроены в Python. Они обеспечивают простое и удобное управление данными. Вот основные типы:

🟠Список (List)
Массив, который может содержать элементы разных типов. Динамический (размер меняется), упорядоченный (элементы хранятся в порядке добавления).
my_list = [1, "hello", 3.14]
print(my_list[1]) # "hello"


🟠Кортеж (Tuple)
Похож на список, но неизменяемый. Используется для данных, которые не должны быть изменены.
my_tuple = (10, 20, 30)
print(my_tuple[0]) # 10


🟠Множество (Set)
Неупорядоченная коллекция уникальных элементов. Удобно для работы с множествами (поиск пересечений, объединений и т.д.).
my_set = {1, 2, 3, 2}
print(my_set) # {1, 2, 3}


🟠Словарь (Dictionary)
Хранит пары ключ-значение. Очень эффективен для быстрого поиска данных по ключу.
my_dict = {"name": "Alice", "age": 25}
print(my_dict["name"]) # Alice


🚩Пользовательские структуры данных

Эти структуры создаются с помощью классов или других механизмов, доступных в Python. Они применяются для решения задач, которые не могут быть эффективно выполнены встроенными средствами.

🟠Стек (Stack)
Принцип работы: LIFO (последним пришел — первым ушел). Реализуется через список или collections.deque.
stack = []
stack.append(10) # Добавление
stack.append(20)
print(stack.pop()) # Удаление последнего элемента (20)


🟠Очередь (Queue)
Принцип работы: FIFO (первым пришел — первым ушел). Реализуется через collections.deque или библиотеку queue.
from collections import deque

queue = deque()
queue.append(10)
queue.append(20)
print(queue.popleft()) # 10


🟠Связный список (Linked List)
Элементы связаны друг с другом через указатели. Гибче массивов, но сложнее в реализации.
class Node:
def __init__(self, data):
self.data = data
self.next = None

class LinkedList:
def __init__(self):
self.head = None

def append(self, data):
if not self.head:
self.head = Node(data)
else:
current = self.head
while current.next:
current = current.next
current.next = Node(data)


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
🤔 Как распознать NP-полную задачу?

Задача NP-полная, если:
- она принадлежит классу NP (решение проверяется за полиномиальное время);
- она неизвестна как решаемая за полиномиальное время, но если бы нашлось решение для одной NP-полной задачи — решились бы и остальные;
- она сводится к другим NP-полным задачам.
Примеры: задача коммивояжёра, рюкзака, раскраски графа.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🤔3🔥2
🤔 Как сгенерировать и применить миграцию?

В Django миграции используются для изменения структуры базы данных (создание, изменение и удаление таблиц и полей).

🚩Генерация миграции (`makemigrations`)

🟠Создаём или изменяем модель (`models.py`)
Пример модели пользователя:
from django.db import models

class UserProfile(models.Model):
name = models.CharField(max_length=100)
age = models.IntegerField()


🟠Генерируем миграцию
Запускаем команду:
python manage.py makemigrations


Django создаст файл миграции в migrations/
migrations/
0001_initial.py # Файл с SQL-изменениями


Проверяем SQL-запрос, который будет выполнен
python manage.py sqlmigrate myapp 0001


🚩Применение миграции (`migrate`)

После генерации нужно применить миграции к базе данных:
python manage.py migrate


🚩Что делать, если модель изменилась?

Добавим поле в models.py
class UserProfile(models.Model):
name = models.CharField(max_length=100)
age = models.IntegerField()
email = models.EmailField(default="example@example.com") # Добавили поле


Сгенерируем новую миграцию
python manage.py makemigrations


Применяем изменения к БД
python manage.py migrate


🚩Откат миграций (`migrate <номер>`)

Если нужно откатить последнее изменение:
python manage.py migrate myapp 0001  # Откат до первой миграции


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥3
🤔 Откуда берутся поля у access токена?

Поля access токена формируются на стороне сервера в момент выдачи. Они могут включать:
- идентификатор пользователя
- время истечения срока
- роли, права доступа
- информацию о клиентском приложении
Если используется JWT, поля помещаются в его полезную нагрузку (payload) в виде JSON-объекта и подписываются. Структура зависит от системы авторизации (OAuth2, OpenID Connect и др.).


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
🤔 Какие задачи хорошо параллелятся, какие плохо?

Параллельные вычисления — это выполнение нескольких задач одновременно, чтобы ускорить работу программы. Но не все задачи можно эффективно распараллелить.

🚩Независимые задачи (Embarrassingly Parallel Tasks)

Это задачи, которые можно выполнять полностью независимо друг от друга, без обмена данными.
Обработка изображений (фильтры, преобразования)
Генерация фрагментов видео
Рендеринг 3D-графики (каждый кадр рендерится отдельно)
Обучение моделей машинного обучения на разных данных (если без обмена параметрами)
from concurrent.futures import ProcessPoolExecutor
from PIL import Image

def process_image(image_path):
img = Image.open(image_path)
img = img.convert("L") # Перевод в черно-белый формат
img.save(f"processed_{image_path}")

images = ["img1.jpg", "img2.jpg", "img3.jpg"]

with ProcessPoolExecutor() as executor:
executor.map(process_image, images)


🚩Численные вычисления на больших данных (SIMD-операции, GPU-ускорение)

Если однотипные операции выполняются на большом массиве данных, их можно делать параллельно.
Умножение матриц (используется в нейросетях)
Обработка сигналов (FFT, фильтрация)
Физические симуляции
import numpy as np

A = np.random.rand(1000, 1000)
B = np.random.rand(1000, 1000)

C = A @ B # Быстрое умножение матриц (использует несколько ядер процессора)


🚩Веб-запросы и сетевые операции

Когда программа ждет ответа от сервера, процесс простаивает. Можно запускать запросы асинхронно, чтобы делать их параллельно.
Скачивание файлов
Парсинг веб-страниц
Вызовы API
import asyncio
import aiohttp

async def fetch(url):
async with aiohttp.ClientSession() as session:
async with session.get(url) as response:
return await response.text()

async def main():
urls = ["https://example.com", "https://google.com"]
tasks = [fetch(url) for url in urls]
responses = await asyncio.gather(*tasks)
print(responses)

asyncio.run(main())


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
🤔 Что делают методы tell и seek?

tell возвращает текущую позицию курсора в файле. seek позволяет установить позицию для следующей операции чтения или записи.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥4💊3
🤔 Что такое хранитель (Memento)?

Это поведенческий паттерн проектирования, который позволяет сохранять и восстанавливать предыдущее состояние объекта без нарушения инкапсуляции. Этот паттерн особенно полезен для реализации операций отмены и повтора, так как он позволяет хранить состояния объектов и возвращать их к этим состояниям по необходимости.

🚩Зачем нужен?

🟠Сохранение состояния:
Позволяет сохранять текущее состояние объекта и восстанавливать его позже.
🟠Инкапсуляция:
Обеспечивает сохранение состояния объекта без нарушения его инкапсуляции. Внутренние детали объекта остаются скрытыми от других объектов.
🟠Отмена и повтор операций:
Поддерживает функциональность отмены и повтора операций, так как позволяет возвращать объект к предыдущим состояниям.
Пример реализации
class Memento:
def __init__(self, state: str):
self._state = state

def get_state(self) -> str:
return self._state

class TextEditor:
def __init__(self):
self._state = ""
self._history = []

def type(self, text: str):
self._save_state()
self._state += text

def _save_state(self):
self._history.append(Memento(self._state))

def undo(self):
if not self._history:
return
memento = self._history.pop()
self._state = memento.get_state()

def get_content(self) -> str:
return self._state

# Клиентский код для использования паттерна Хранитель
def main():
editor = TextEditor()

editor.type("Hello, ")
editor.type("world!")
print(editor.get_content()) # Hello, world!

editor.undo()
print(editor.get_content()) # Hello,

editor.undo()
print(editor.get_content()) #

if __name__ == "__main__":
main()


1⃣`Memento`:
Сохраняет состояние объекта. Он предоставляет методы для получения сохраненного состояния, но не предоставляет методов для изменения состояния, что обеспечивает неизменность.

2⃣`TextEditor`:
Создает и использует объекты Memento для сохранения и восстановления своего состояния. Методы type и undo позволяют редактировать текст и отменять изменения.

3⃣`_save_state`:
Сохраняет текущее состояние редактора в истории перед каждым изменением.

4⃣`undo`:
Восстанавливает предыдущее состояние редактора из истории.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
🤔 Что такое тернарный оператор?

Это форма записи условного выражения в одну строку, которая позволяет выбрать значение в зависимости от условия. Он удобен, когда нужно быстро присвоить значение переменной на основе простого условия, не используя полноценную конструкцию if.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥1
🤔 В чем отличие асинхронности, threading'га и мультипроцессинга?

Асинхронность, threading и мультипроцессинг - это три различных подхода к параллельному выполнению задач каждый из которых имеет свои особенности и применения:

🚩Асинхронность (Asynchronous)

Асинхронность предполагает выполнение задач без ожидания их завершения. Используется для работы с вводом-выводом (I/O), таким как чтение или запись файлов, сетевые запросы и т. д. В асинхронном коде задачи не блокируют основной поток выполнения, что позволяет эффективно использовать ресурсы процессора. Примеры асинхронных моделей включают в себя асинхронные функции и ключевые слова в Python (например, async, await).

🚩Потоки (Threading)

Потоки позволяют выполнять несколько частей кода (потоков) параллельно в пределах одного процесса. Используются для выполнения многозадачных операций, которые могут быть распределены между несколькими ядрами процессора. Потоки могут выполняться параллельно, но могут также конкурировать за общие ресурсы, что может привести к проблемам синхронизации и безопасности. В некоторых языках, таких как Python, использование потоков ограничено из-за GIL (Global Interpreter Lock), что может снижать эффективность при использовании множества потоков для CPU-интенсивных задач.

🚩Мультипроцессинг (Multiprocessing)

Мультипроцессинг также позволяет выполнять несколько частей кода параллельно, но каждая часть выполняется в отдельном процессе. Каждый процесс имеет свое собственное пространство памяти, что делает мультипроцессинг более подходящим для многозадачных вычислений на многоядерных системах. Процессы обычно имеют больший накладные расходы по сравнению с потоками, поскольку каждый из них требует своих собственных ресурсов памяти и управления. Мультипроцессинг избегает проблемы GIL, что делает его более эффективным для CPU-интенсивных задач в Python и других языках.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
🤔 Как переподнять исключение в блоке except?

Внутри блока except можно использовать ключевое слово raise без аргументов, чтобы повторно выбросить текущее перехваченное исключение. Это полезно, если нужно что-то логировать или изменить, но затем продолжить распространение ошибки.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥2
🤔 Можно ли при вызове метода save указать какие поля изменять?

Да, в Django ORM можно указать конкретные поля для сохранения, используя параметр update_fields в методе .save().

🚩Как использовать `update_fields`

Пример модели
from django.db import models

class UserProfile(models.Model):
name = models.CharField(max_length=100)
email = models.EmailField()
age = models.IntegerField()


Обновляем только поле name, не трогая email и age
user = UserProfile.objects.get(id=1)
user.name = "Новый пользователь"
user.save(update_fields=["name"]) # Обновит только поле `name`


🚩Что делает `update_fields`?

Генерирует SQL-запрос только для указанных полей, например:

  UPDATE user_profile SET name = 'Новый пользователь' WHERE id = 1;


🚩Когда `update_fields` полезен?
Уменьшает нагрузку на БД, так как обновляет только нужные поля.
Полезен, если нужно изменить одно поле, а не всю запись.
Избегает ненужных изменений в auto_now и auto_now_add полях (DateTimeField).

🚩Ограничения `update_fields`

Нельзя использовать при создании объекта (save() с update_fields не работает для .create()).
user = UserProfile(name="Alice", email="alice@example.com")
user.save(update_fields=["name"]) # Ошибка, объект ещё не в базе!


Не обновляет auto_now-поля (DateTimeField) автоматически!
updated_at = models.DateTimeField(auto_now=True)  # Не обновится с `update_fields`


Решение: обновить вручную:
user.updated_at = timezone.now()
user.save(update_fields=["name", "updated_at"])


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
🤔 Как можно проверить, что значение есть в словаре?

Проверить наличие ключа в словаре можно с помощью оператора in


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
💊6👍5🔥2
🤔 Что такое пакет?

Пакет (package) в Python — это набор модулей, объединённых в одну директорию. Главное отличие от обычной папки — наличие файла __init__.py, который делает директорию пакетом.

🚩Как создать пакет?

Допустим, мы хотим создать пакет math_utils с модулями для работы с числами.
/my_project
/math_utils ← Это пакет
__init__.py ← Делаем директорию пакетом
arithmetic.py ← Модуль с функциями сложения/вычитания
geometry.py ← Модуль с функциями для работы с фигурами
main.py ← Основной файл программы


Код в arithmetic.py
def add(a, b):
return a + b

def subtract(a, b):
return a - b


Код в geometry.py
def square_area(side):
return side * side


Код в __init__.py
from .arithmetic import add, subtract
from .geometry import square_area


Теперь можно импортировать функции прямо из пакета:
from math_utils import add, square_area

print(add(2, 3)) # 5
print(square_area(4)) # 16


🚩Импорт модулей из пакета

Импортируем весь пакет (с __init__.py)
from math_utils import add, square_area


Импортируем конкретный модуль
from math_utils import arithmetic
print(arithmetic.add(3, 5))


Импортируем конкретную функцию из модуля
from math_utils.arithmetic import add
print(add(3, 5))


🚩Как работают пакеты в Python?

Python ищет пакеты по sys.path
import sys
print(sys.path) # Пути, где Python ищет модули


Если Python не находит пакет, можно добавить путь вручную:
import sys
sys.path.append("/path/to/my_project")


Можно создавать вложенные пакеты
/my_project
/math_utils
__init__.py
/advanced
__init__.py
calculus.py


Импорт:
from math_utils.advanced.calculus import derivative


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
🤔 Что даёт Poetry?

Это инструмент для управления зависимостями и пакетов Python.
1. Упрощает установку, обновление и управление зависимостями через файл pyproject.toml.
2. Поддерживает изоляцию зависимостей, автоматически создавая виртуальное окружение.
3. Помогает публиковать собственные Python-пакеты в PyPI, упрощая процесс сборки и выпуска.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍3💊3
🤔 Что такое CRUD?

CRUD — это аббревиатура из четырех основных операций с данными:

C (Create) – создание
R (Read) – чтение
U (Update) – обновление
D (Delete) – удаление

🚩Разберем CRUD на примере работы с базой данных в Python

🟠Create (Создание)
Добавление новой записи в базу данных.
import sqlite3

conn = sqlite3.connect("example.db")
cursor = conn.cursor()

# Создаем таблицу, если её нет
cursor.execute("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT)")

# Добавляем пользователя
cursor.execute("INSERT INTO users (name) VALUES (?)", ("Алиса",))

conn.commit() # Сохраняем изменения
conn.close()


🟠Read (Чтение)
Получение данных из базы.
conn = sqlite3.connect("example.db")
cursor = conn.cursor()

cursor.execute("SELECT * FROM users")
users = cursor.fetchall() # Получаем все записи

for user in users:
print(user)

conn.close()


🟠Update (Обновление)
Изменение существующей записи.
conn = sqlite3.connect("example.db")
cursor = conn.cursor()

cursor.execute("UPDATE users SET name = ? WHERE id = ?", ("Боб", 1))

conn.commit()
conn.close()


🟠Delete (Удаление)
Удаление записи из базы.
conn = sqlite3.connect("example.db")
cursor = conn.cursor()

cursor.execute("DELETE FROM users WHERE id = ?", (1,))

conn.commit()
conn.close()


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
🤔 Какой алгоритм работы CSRF middleware?

Защищает Django-приложения от поддельных запросов. Алгоритм работы:
1. При загрузке формы сервер вставляет CSRF-токен в скрытое поле
2. При отправке запроса клиент должен отправить этот токен в заголовке
3. Django сверяет токен с тем, что хранится в сессии пользователя
4. Если токены не совпадают, запрос отклоняется


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥2
🤔 Что такое set?

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

🚩Основные характеристики `set`

🟠Неупорядоченность
Элементы множества не имеют фиксированного порядка, то есть вы не можете обращаться к элементам по индексу, как в списках или кортежах.

🟠Уникальность элементов
Во множестве не может быть дубликатов. Если вы добавите во множество несколько одинаковых элементов, они будут храниться как один экземпляр.

🟠Изменяемость
Множества в Python изменяемы: вы можете добавлять, удалять и изменять их элементы. Однако сами элементы множества должны быть неизменяемыми (например, числа, строки, кортежи).

🟠Быстродействие
Операции проверки принадлежности (in), добавления и удаления элементов работают очень быстро, благодаря использованию хэш-таблиц в реализации множества.

🚩Создание множества

🟠Пустое множество
Для создания пустого множества используется функция set(), так как {} создаёт пустой словарь
empty_set = set()
print(empty_set) # Output: set()


🟠Создание множества с элементами
Вы можете передать список, строку, кортеж или другой итерируемый объект в функцию set().
# Создание множества из списка
numbers = set([1, 2, 3, 4, 5])
print(numbers) # Output: {1, 2, 3, 4, 5}

# Создание множества из строки (уникальные символы)
chars = set("hello")
print(chars) # Output: {'h', 'e', 'l', 'o'} (порядок может быть разным)


🟠Использование литералов
Вы также можете использовать фигурные скобки {} для создания множества
fruits = {"apple", "banana", "cherry"}
print(fruits) # Output: {'apple', 'banana', 'cherry'}


🚩Основные операции с множествами

🟠Добавление элементов
Используется метод add()
my_set = {1, 2, 3}
my_set.add(4)
print(my_set) # Output: {1, 2, 3, 4}


🟠Удаление элементов
remove() — удаляет элемент, выбрасывая ошибку, если его нет.
discard() — удаляет элемент, не выбрасывая ошибку, если его нет.
my_set = {1, 2, 3}
my_set.remove(2) # Удаляем элемент 2
print(my_set) # Output: {1, 3}

my_set.discard(5) # Ошибки не будет, если элемента 5 нет


pop() — удаляет и возвращает случайный элемент (так как множество неупорядочено)
my_set = {1, 2, 3}
removed_element = my_set.pop()
print(removed_element) # Например: 1
print(my_set) # Например: {2, 3}


🟠Очистка множества
my_set = {1, 2, 3}
my_set.clear()
print(my_set) # Output: set()


🟠Проверка наличия элемента
Используется оператор in
my_set = {1, 2, 3}
print(2 in my_set) # Output: True
print(5 in my_set) # Output: False


🚩Операции над множествами

Python поддерживает классические операции теории множеств:

🟠Объединение (`union` или `|`)
Возвращает множество, содержащее все элементы из двух множеств.
set1 = {1, 2, 3}
set2 = {3, 4, 5}
print(set1 | set2) # Output: {1, 2, 3, 4, 5}
print(set1.union(set2)) # То же самое


🟠Пересечение (`intersection` или `&`)
Возвращает элементы, которые присутствуют в обоих множествах.
print(set1 & set2)  # Output: {3}
print(set1.intersection(set2)) # То же самое


🟠Разность (`difference` или `-`)
Возвращает элементы, которые присутствуют только в одном множестве (а не в другом).
print(set1 - set2)  # Output: {1, 2} (только в set1)
print(set1.difference(set2)) # То же самое


🟠Симметрическая разность (`symmetric_difference` или `^`)
Возвращает элементы, которые есть в одном из множеств, но не в обоих сразу.
print(set1 ^ set2)  # Output: {1, 2, 4, 5}
print(set1.symmetric_difference(set2)) # То же самое


🚩Неизменяемое множество (`frozenset`)

Если вам нужно создать множество, которое нельзя изменить, используйте frozenset
frozen = frozenset([1, 2, 3])
print(frozen) # Output: frozenset({1, 2, 3})

# frozen.add(4) # Ошибка: 'frozenset' object has no attribute 'add'


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6