СОБЕСЕДОВАНИЕ с Эдуардом | Знания Python, задачи на код, алгоритмические задачи

YOUTUBE · 30.11.2025 08:49

Ключевые темы и таймкоды

Введение и структура видео

0:00
  • Видео состоит из двух секций: вопросы по языку Python и задачи на Python.
  • Первая секция включает вопросы по внутренностям Python, а вторая - задачи на знание языка.
  • Презентация сделана в сервисе Canva.

Числовые типы данных в Python

0:59
  • В Python есть пять числовых типов данных: int, float, decimal, complex.
  • int используется для целых чисел, float - для дробных чисел, decimal - для точных вычислений в банковской сфере.
  • complex используется для комплексных чисел, которые важны в математике и науке.

Преимущества и недостатки типов данных

1:56
  • Float работает быстрее, чем decimal, но decimal обеспечивает более точное округление.
  • Комплексные числа важны в математике и науке, но редко используются в повседневной программировании.
  • Python изначально разрабатывался для университетов, что объясняет его интеграцию комплексных чисел.

Неизменяемость числовых типов данных

5:51
  • Все целочисленные типы данных в Python неизменяемы.
  • Это касается int, float, decimal и complex.

Различия между списками и кортежами

6:49
  • Кортежи неизменяемы, что делает их быстрее и эффективнее в использовании памяти.
  • Списки могут быть изменяемыми, что делает их подходящими для хранения данных.
  • Кортежи подходят для хранения разнородных данных, а списки - для однотипных данных.

Именованные кортежи

10:46
  • Именованные кортежи позволяют обращаться к элементам по имени, что повышает читаемость кода.
  • Они наследуются от обычных кортежей и имеют все их преимущества.

Срезы в списках

11:44
  • Срезы позволяют извлекать элементы из списка без ошибок, если индекс выходит за пределы.
  • Это поведение определяется бай-дизайном Python и позволяет разработчикам выбирать, как обрабатывать такие случаи.

Срезы и однотипность в Python

12:44
  • В Python срезы работают одинаково для списков, кортежей и строк.
  • Важно понимать, что срезы работают одинаково для разных типов данных.
  • Это помогает лучше понимать и использовать срезы в других контекстах.

Объекты и слайсы

13:42
  • В Python все является объектом, включая срезы.
  • Слайсы можно создать с помощью функции слайс.
  • Слайсы можно рассматривать как объекты, которые можно использовать для доступа к элементам коллекций.

Каверзный вопрос о кортежах

15:41
  • Вопрос о добавлении списка к нулевому элементу кортежа.
  • В изменяемых объектах оператор += добавляет новый элемент, а в неизменяемых создает новый объект.
  • В данном случае происходит исключение, но список все же меняется.

Особенности Python

21:31
  • Python скрывает много особенностей, которые могут быть полезны для профессионалов.
  • Знание этих особенностей может помочь на собеседованиях.
  • Важно изучать и понимать эти особенности для глубокого понимания языка.

Типы словарей в Python

22:31
  • В Python есть несколько типов словарей: обычный словарь dict, Counter, ChainMap, OrderedDict, DefaultDict.
  • Обычный словарь dict является центральной структурой языка.
  • OrderedDict и DefaultDict имеют свои преимущества, но обычный словарь уже практически заменил их.

Исключения в Python

26:25
  • Исключения в Python могут быть вызваны ошибками выполнения или синтаксическими ошибками.
  • Исключения останавливают выполнение программы и создают объект исключения.
  • Ошибки делятся на две категории: синтаксические и времени выполнения.

Обработка исключений

27:24
  • В Python синтаксические ошибки также создают исключения.
  • Конструкция try-except позволяет обрабатывать исключения.
  • Блоки finally и finally-else выполняются в любом случае.

Влияние исключений на производительность

31:20
  • Исключения замедляют выполнение программы.
  • Рекомендуется избегать использования исключений в вложенных циклах.
  • Вопросы на собеседованиях часто касаются оптимизации кода.

Типы аргументов в Python

33:18
  • Аргументы передаются по ссылке.
  • Функции могут принимать любое количество позиционных и именованных аргументов.
  • Звездочка после позиционных аргументов указывает на именованные аргументы.

Именование аргументов

35:15
  • Рекомендуется использовать именованные аргументы для удобства чтения кода.
  • Переменное количество аргументов можно обозначать звездочкой.
  • В реальной жизни можно отступать от правил, если это улучшает читаемость кода.

Аргументы по умолчанию

37:13
  • Аргументы по умолчанию устанавливаются один раз и могут преследовать последующие вызовы функции.
  • Изменяемые объекты не следует использовать в аргументах по умолчанию.
  • Пример функции с изменяемым списком по умолчанию показывает, как это может привести к проблемам.

Словари и хэш-таблицы

40:11
  • Словари и множества используют хэш-таблицы для хранения данных.
  • Хэш-таблицы позволяют быстро находить элементы по ключу.
  • При добавлении ключа в словарь вычисляется его хэш-значение, которое используется для размещения ключа и значения в таблице.

Перестройка словарей

41:09
  • Словари перестраиваются автоматически при заполнении на две трети.
  • Перестройка включает вычисление нового хэш-значения и размещение ключа и значения в таблице.
  • Это обеспечивает минимальное количество коллизий и высокую скорость поиска.

Производительность словарей

42:08
  • Встроенная функция hash в словарях работает хорошо, равномерно распределяя значения.
  • В среднем время поиска в словаре составляет O(1).
  • Если функция hash работает плохо, время поиска может быть O(n).

Создание словарей и множеств

44:00
  • В Python для создания пустого словаря используются пустые скобки, а для множества - фигурные скобки.
  • Это связано с историей появления словарей и множеств в языке.

Range объекты

45:00
  • Range объекты - это ленивые последовательности, занимающие фиксированное количество памяти.
  • Они отдают по одному элементу при каждом обращении, что делает их итераторами.
  • Range объекты хранят три значения: первый элемент, последний элемент и длину.

Декораторы

46:56
  • Декораторы позволяют расширять функционал функции без изменения её внутренностей.
  • Декораторы могут использоваться как синтаксический сахар или вручную.
  • Декораторы классов могут быть сложными для понимания и использования.

Решение задачи

50:49
  • Задача: реализовать функцию, которая принимает число и возвращает строку с цифрами от 0 до N.
  • Решение: использовать объект range для генерации чисел от 0 до N, затем преобразовать их в строку и использовать метод join.
  • Метод join позволяет избежать квадратичной сложности и эффективно использовать память.

Создание словаря из двух списков

54:44
  • Функция merche принимает два списка и возвращает словарь, где ключи из первого списка, а значения из второго.
  • Словарь должен быть упорядочен по ключам.
  • Пример: значения a, b, c, d, e, f должны быть упорядочены по ключам a, b, c, d, e, f.

Оптимизация кода

56:42
  • Можно отсортировать первый список и добавлять значения по одному.
  • Важно понимать, что ключи и значения могут быть в любом порядке.
  • Пример: 6a, 1b, 2c, 3d, 4e, 5f.

Сортировка словаря

57:41
  • Словарь создается на основе ключей и значений.
  • Сортировка словаря по первому элементу.
  • Пример: 1b, 2c, 3d, 4e, 5f.

Оптимизация сортировки

1:00:13
  • Можно использовать функцию zip для создания итератора.
  • Сортировка итератора по первому элементу.
  • Пример: 1b, 2c, 3d, 4e, 5f.

Бонусная задача

1:02:12
  • Функция принимает квадратную матрицу из 0 и 1, где строки и столбцы отсортированы по возрастанию.
  • Нужно посчитать количество нулей в матрице.
  • Пример матрицы: 0011001111.

Решение задачи

1:04:09
  • Тупое решение: пройтись по каждой строке и посчитать нули.
  • Линейное решение: суммировать единицы и вычитать их из общего количества элементов.
  • Пример: 0011001111.

Оптимизация алгоритма

1:06:07
  • Матрица отсортирована слева направо и сверху вниз.
  • Можно перевернуть матрицу и считать снизу вверх.
  • Пример: 0110011111.

Использование встроенных функций

1:09:49
  • Использование функций max и min для оптимизации.
  • Пример: найти первую единицу справа и считать нули слева.
  • Важно понимать, сколько памяти занимают встроенные функции.

Оптимизация алгоритма

1:11:48
  • Обсуждение сложности алгоритма и его оптимизации.
  • Рассмотрение различных подходов к поиску нулей в матрице.
  • Решение использовать зигзагообразный алгоритм для минимизации сложности.

Реализация алгоритма

1:12:44
  • Использование указателей для движения по матрице.
  • Инициализация матрицы и переменных.
  • Условия выхода из цикла при достижении конца матрицы.

Тестирование алгоритма

1:16:41
  • Тестирование алгоритма на матрице с нулями.
  • Проверка работы алгоритма на различных значениях матрицы.
  • Обработка краевых значений и тестирование на единичных матрицах.

Заключение и рекомендации

1:25:15
  • Важность тестирования краевых значений.
  • Положительная оценка работы кандидата.
  • Рекомендации по дальнейшему изучению и прокачке навыков.