Подходит ли Python для структур данных и алгоритмов?
Да, а для обучения это, пожалуй, лучший выбор: код короткий, поэтому вы читаете сам алгоритм, а не синтаксис вокруг него. Стоит знать о двух компромиссах. Python работает медленнее Java и C++, что важно при жёстких ограничениях по времени в спортивном программировании, но редко на собеседовании, а его встроенные типы скрывают ту самую стоимость операций, о которой вы учитесь рассуждать. Поэтому на этом пути вы сначала пишете их сами.
Какие структуры данных Python нужно знать для собеседований?
list (динамический массив), dict и set (хеш-таблицы), tuple, collections.deque (очередь, быстрая с обоих концов), heapq (двоичная min-куча на списке) и collections.Counter. Знайте стоимость каждой операции, а не только её название. Встроенных связного списка, дерева, префиксного дерева и графа в Python нет, поэтому их вы пишете сами, на первом и втором шагах.
Зачем писать стек или очередь, если в Python они уже есть?
Потому что на собеседованиях редко просят воспользоваться очередью и часто спрашивают, почему ваше решение медленное. Очередь на основе list платит за каждый pop(0), потому что все оставшиеся элементы сдвигаются на одну позицию; deque.popleft() не платит. Реализовав каждую структуру один раз, вы узнаёте их стоимость настолько хорошо, что выбираете нужную не задумываясь.
Достаточно ли быстр Python для спортивного программирования?
Для большинства задач да. При жёстких ограничениях по времени надёжнее C++, поэтому им и пользуется большинство спортивных программистов, а многие тестирующие системы предлагают PyPy, который выполняет тот же код на Python гораздо быстрее. На собеседовании скорость, с которой вы пишете, гораздо важнее скорости выполнения кода, и здесь Python выигрывает.
Какой в Python лимит рекурсии и важен ли он для DSA?
По умолчанию CPython останавливается на глубине 1000 вызовов, поэтому рекурсивный поиск в глубину по длинной цепочке может выбросить RecursionError. Лимит можно поднять через sys.setrecursionlimit, но куда лучше привычка, которую любят видеть интервьюеры: умение заменить рекурсию циклом и явным стеком, той самой структурой, которую вы пишете на первом шаге.
Нужно ли знать Python, прежде чем начинать этот путь?
Вы должны уверенно владеть функциями, циклами, списками и словарями, а в идеале и классами, ведь каждая структура здесь пишется как класс. Если вы ещё не на этом уровне, курс Python от Coddy сначала бесплатно доведёт вас до него, а этот путь начинается там, где он заканчивается.