Python School
82.4K subscribers
2.4K photos
7 videos
568 links
Уроки по Python, которые упростят вам жизнь. Без идиотских туториалов.

Наши мемы для программистов: @conhum

Сотрудничество - @alivian

Канал сотрудничает с рекламным сервисом @Tgpodbor_official

РКН: clck.ru/3G6pBb
加入频道
Методы списка .sort() и .reverse()

У списка (и только у него) есть особые методы .sort() и .reverse() которые делают тоже самое, что соответствующие функции sorted() и reversed(), но при этом:

Меняют сам исходный список, а не генерируют новый.

Возвращают None, а не новый список.

Поддерживают те же дополнительные аргументы;
Устойчивость сортировки

Допустим данные нужно отсортировать сначала по столбцу А по возрастанию, затем по столбцу B по убыванию, и наконец по столбцу C снова по возрастанию.

Если данные в столбце B числовые, то при помощи подходящей функции в key можно поменять знак у элементов B, что приведёт к необходимому результату.
А если все данные текстовые? Тут есть такая возможность.
Дело в том, что сортировка sort в Python устойчивая (начиная с Python 2.2), то есть она не меняет порядок «одинаковых» элементов.

Поэтому можно просто отсортировать три раза по разным ключам.
Дополнительная информация по использованию параметра key при сортировке

Перед тем, как сравнивать два элемента списка к ним применялась функция prepare_item, которая меняла знак у стоимости (функция применяется ровно по одному разу к каждому элементу. В результате при одинаковом первом значении сортировка по второму происходила в обратном порядке.

Чтобы не плодить утилитарные функции, вместо использования сторонней функции, того же эффекта можно добиться с использованием лямбда-функции.
Объединение строк, кортежей, списков, словарей без изменения исходных (ч.1)

Рассмотрим способы объединения строк, кортежей, списков, словарей без изменения исходных коллекций — когда из нескольких коллекций создаётся новая коллекция того же тип без изменения изначальных.

Объединение строк (string) и кортежей (tuple) возможна с использованием оператора сложения «+»
Объединение строк, кортежей, списков, словарей без изменения исходных (ч.2)

Для объединения списков (list) возможны три варианта без изменения исходного списка:
Добавляем все элементы второго списка к элементам первого, (аналог метод .extend() но без изменения исходного списка)
Синтаксис среза

Следует помнить, что взяв элемент по индексу или срезом (slice) мы не как не меняем исходную коллекцию, мы просто скопировали ее часть для дальнейшего использования (например добавления в другую коллекцию, вывода на печать, каких-то вычислений). Поскольку сама коллекция не меняется — это применимо как к изменяемым (список) так и к неизменяемым (строка, кортеж) последовательностям.
Объединение строк, кортежей, списков, словарей без изменения исходных (ч.3)

Добавляем второй список как один элемент без изменения исходного списка (аналог метода.append() но без изменения исходного списка)
Объединение строк, кортежей, списков, словарей без изменения исходных (ч.4)

Со словарем (dict) все не совсем просто.

Сложить два словаря чтобы получить третий оператором + Питон не позволяет «TypeError: unsupported operand type(s) for +: 'dict' and 'dict'».

Это можно сделать по-другому комбинируя методы .copy() и .update()
Объединение множеств без изменения исходных

Для обоих типов множеств (set, frozenset) возможны различные варианты комбинации множеств (исходные множества при этом не меняются — возвращается новое множество).
Объединение списка, словаря и изменяемого множества с изменением исходной коллекции (ч.1)


Для списка. Добавляем все элементы второго списка к элементам первого с измением первого списка методом .extend()
Объединение списка, словаря и изменяемого множества с изменением исходной коллекции (ч.2)

Для изменения словаря с добавления элементов другого словаря используется метод .update().

Обратите внимание: для совпадающих ключей словаря при этом обновляются значения.
Возможная ошибка при обработке элементов

Не меняйте количество элементов коллекции в теле цикла во время итерации по этой же коллекции! — Это порождает не всегда очевидные на первый взгляд ошибки. Чтобы этого избежать подобных побочных эффектов, можно, например, итерировать копию коллекции.
Объединение списка, словаря и изменяемого множества с изменением исходной коллекции (ч.3)

Для изменяемого множества (set) кроме операций, описанных в предыдущем разделе, также возможны их аналоги, но уже с изменением исходного множества — эти методы заканчиваются на _update. Результат зависит от того, какое множество каким обновляем.
Особенности работы с изменяемой и не изменяемой коллекцией (ч.1)

Строка неизменяемая коллекция — если мы ее меняем — мы создаем новый объект!
This media is not supported in your browser
VIEW IN TELEGRAM
AI Journey 2023 — международная конференция по ИИ, пройдёт с 22 по 24 ноября.

Там будут выступать ведущие российские и международные эксперты. На конференции они расскажут: какие передовые исследования возможны в науке благодаря AI, какие супервозможности открывают ИИ-технологии для бизнеса и как ИИ помогает обществу.

После чего будут подведены итоги отбора научных статей AI Journey Science и награждение победителей соревнований AI Challenge и AIJ Contest.

Больше информации о конференции можно найти на сайте.
Особенности работы с изменяемой и не изменяемой коллекцией (ч.2)

Список изменяем и тут надо быть очень внимательным, чтобы не допустить серьезную ошибку! Сравните данный пример с предыдущем примером со строками.
Особенности работы с изменяемой и не изменяемой коллекцией (ч.2)

Список изменяем и тут надо быть очень внимательным, чтобы не допустить серьезную ошибку! Сравните данный пример с предыдущем примером со строками.
Создание объектов, поддерживающих выражение with

Все знают о том, как, например, открыть файл, или, возможно, как установить блокировку с использованием оператора with. Но можно ли самостоятельно реализовать механизм управления блокировками? Да, это вполне реально. Протокол управления контекстом исполнения реализуется с использованием методов enter и exit
Добавляем условие для фильтрации

Важно: Условие проверяется на каждой итерации, и только элементы ему удовлетворяющие идут в обработку в выражении.

Мы можем использовать несколько условий, комбинируя их логическими операторами
Добавляем обработку элемента в выражении

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

Выражение выполняется независимо на каждой итерации, обрабатывая каждый элемент индивидуально.
Аналоги в виде цикла for и в виде функций

Задачи решаемые с помощью генераторов выражений можно решить и без них. Каждый генератор выражений можно переписать в виде цикла for, но не каждый цикл for можно представить в виде такого выражения.