Python tricks | Хитрости Питона
5.67K subscribers
2.21K photos
26 videos
1 file
2.52K links
Здесь вы найдете лучшие практики и приёмы, которые используют опытные программисты.

Сотрудничество: @SIeep_Token

Мы на платформе: https://telegram.me/python_tricks

Ссылка на канал: https://t.me/+QayZf6ccsQllZTYy
Download Telegram
​​Удаление дубликатов в списке

Первое что приходит на ум — преобразовать список во множество и обратно. Это хороший и рабочий способ. Но если вам нужно сохранить последовательность, то этот способ не подойдёт. С этой задачей легко справится OrderedDict из модуля collections
​​Назначение переменных и функций по условию

Иногда элементы с условиями очень просты — в этих случаях лучше использовать тернарный оператор if/else:
X = 2 if Y else 3
В этом примере X присвоится 2, если Y будет истинно, иначе присвоится 3.
Ещё интереснее применение тернарного оператора в отношении функций
​​Объединение списков без циклов.

Это можно сделать двумя способами. Первый через стандартную функцию sum. Второй способ через применение модуля itertools. Он хоть и более громоздкий, но эффективней.
А какой способ выберете вы?
​​Распаковка последовательности при неизвестном числе элементов.

Для этого в Python есть оператор звездочки – расширенная операция распаковывания последовательности. Переменной со звездочкой присваивается часть списка, содержащая все неприсвоенные элементы, соответствующие этой позиции
​​Сортировка словаря по значениям

Распространена практика использования словарей в качестве таблиц для хранения данных. Сортировка данных словаря по значениям ключей, а не самим ключам, нередко ставит в тупик. Задача решается довольно просто при помощи соответствующего аргумента функции сортировки
​​Сегодня у нас очень простой трюк. И вы должны попробовать его сами.
Что нужно делать:
- импортировать модуль antigravity
- ввести любую команду
...
Результат получится интересным
​​Генераторы словарей.

Многие в курсе про генераторы списков(а если нет, то вот наш пост). Но слышали ли вы о генераторах словарей? Такие генераторы удобны для начальной инициализации значений последовательностей.
​​Преобразование двух списков в словарь

У нас имеется два списка. Один из них содержит названия городов, а второй — их столиц. Как преобразовать эти два списка в словарь? Для этого понадобится функция zip():
​​Поиск подстроки в строке

Pегулярное выражение — это строка, задающая шаблон поиска подстрок в тексте. В Python есть встроенный модуль, позволяющий работать с регулярными выражениями, — re, который содержит функцию search. Она позволит вам найти подстроку в строке
​​Конкатенация списка строк

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

Более эффективный подход к решению этой задачи заключается в использовании функции join():
​​Изменение типа данных в списке

Представим, что вы прочитали из файла список чисел, изначально все эти числа имеют строковый тип данных, чтобы работать с ними - нужно превратить их в целое число, одно из решений данной задачи - использование функции map():
​​Использование анонимных функций

Иногда именованию функции не стоит уделять особого внимания. Например, если вы уверены, что она будет использована только раз. Для таких случаев Python предлагает применять анонимные функции, также называемые лямбда-функциями.
​​Улучшение читаемости больших чисел

Вы можете разделять цифры знаком подчеркивания. Это сделает большое число более читаемым, в то время как математически это не повлияет на синтаксис, поэтому вы по-прежнему можете выполнять арифметические операции как обычно:
​​Генерация перестановок для итерируемого объекта

Функция permutations модуля itertools возвращает итератор с последовательными перестановками из элементов входной последовательности iterable. Каждая комбинация заключена в кортеж с длинной r элементов.
Если r не указано или None, тогда по умолчанию r равна длине iterable и генерируются все возможные перестановки полной длины.
​​Улучшения в проверке типов в python 3.10

Python 3.10 включает много улучшений в проверке типов, среди них оператор объединения типов, синтаксис которого теперь чище.

Кроме того, это простое улучшение не ограничивается только аннотациями типа, оно может применяться с функциями isinstance() и issubclass():
​​Синтаксис менеджера контекста в python 3.10

Контекстные менеджеры отлично подходят, чтобы открывать и закрывать файлы, работать с соединениями баз данных и делать многое другое, а в Python 3.10 они стали немного удобнее. Изменение позволяет в скобках указывать несколько контекстных менеджеров, что удобно, если вы хотите создать в одном операторе with несколько менеджеров:
​​Инвертирование словаря с помощью функции zip()

Иногда возникает необходимость поменять местами ключи со значениями в словаре. Для этого может пригодиться функция zip():
​​Алгоритм бинарного поиска числа в списке

Предположим, что вы ищите фамилию в телефонной книге. Она начинается с буквы "К". Конечно можно начать с самого начала и перелистывать каждую страницу в надежде рано или поздно наткнуться на нужную фамилию, но для более рационального поиска лучше раскрыть книгу на середине, ведь нужная нам буква находится где-то ближе к центру книги.
Перед нами типичная задача поиска. В данном случае для решения задачи можно применить алгоритм бинарного поиска.
Рассмотрим пример, как работает данный поиск. Сыграем в игру, я загадал число от 1 до 100 и вы должны его угадать. При каждой попытке вам будет известно больше ли или меньше моё загаданное число по отношению к названному вами. Вы можете начать перебирать все варианты (1, 2, 3, 4, ...) и в худшем случае вы отгадаете число за 99 попыток. Сложность данного аглоритма O(n). Бинарный поск выполняется со сложностью O(log n) и угадать число будет возможно всего за 7 попыток
​​Модуль copy - поверхностное и глубокое копирование объектов

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

Модyль copy - один из вариантов копирования объекта. copy.copy(x) - возвращает поверхностную копию x.
copy.deepcopy(x) - возвращает полную копию x.

Поверхностная копия создает новый составной объект, и затем (по мере возможности) вставляет в него ссылки на объекты, находящиеся в оригинале.
Глубокая копия создает новый составной объект, и затем рекурсивно вставляет в него копии объектов, находящихся в оригинале.
This media is not supported in your browser
VIEW IN TELEGRAM
Нет идей для проектов? В моем втором канале Replit публикуются интересные приложения с готовым кодом.

Если еще нет коммерческого опыта, но нужно наполнить портфолио — подпишись. Тут проекты, написанные на разных языках программирования, которые ты сможешь повторить: приложения, сервисы, игры, боты и много чего ещё.