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
​​Сортировка словаря по значениям

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

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

Представим, что у вас есть список с числами и необходимо получить указанное число наибольших или наименьших чисел из него.
Одно из решений данной задачи - использование встроенной библиотеки heapq
​​Подсчет всех уникальных значений

Вы можете использовать метод Counter из библиотеки collections, чтобы получить словарь с подсчетом всех уникальных элементов в списке:
​​Просмотр всех методов и атрибутов объекта

Все атрибуты и методы объекта можно посмотреть с помощью функции dir() . Данная функция ведет себя по-разному с разными типами объектов.
Для объектов класса она возвращает список имен всех допустимых атрибутов и базовых атрибутов. 
 
Для объектов библиотек функция вернёт список имен всех атрибутов, содержащихся в этом модуле. 
 
Если параметры не переданы, она возвращает список имен в текущей локальной области.
​​Печать словаря из большого количества вложенных объектов

Для увеличения читаемости при печати словаря из большого количества вложенных объектов может пригодиться модуль pprint