Маленькие секреты больших мастеров
-
Срез с отрицательным числом
Почему spisok[:n] тихо возвращает не то, когда n оказалось меньше нуля.
-
f-строки
Как собрать текст со значениями внутри и почему плюс для этого не годится.
-
Строка, растущая в цикле
Почему s += кусок в цикле стоит заменить на "".join и когда это действительно важно.
-
Словарь со списками внутри
Как складывать значения по ключу, когда ключа ещё нет.
-
Проверка на пустоту и ловушка с нулём
Почему if znachenie — не то же самое, что if znachenie is not None.
-
enumerate вместо range(len(...))
Как получить и номер, и сам элемент, не обращаясь по индексу.
-
Сортировка в два прохода
Что делать, когда одно правило по возрастанию, другое по убыванию, а минусом строку не развернёшь.
-
Почему «Файл 10» идёт раньше «Файла 2»
Обычная сортировка сравнивает названия по буквам, а человек читает числа числами.
-
Список как значение по умолчанию
Почему def f(spisok=[]) — ловушка, которая срабатывает не сразу.
-
all([]) равно True
Почему проверка «все оценки пятёрки» пропускает ученика без оценок.
-
True — это единица
Почему isinstance(True, int) истинно и к чему это приводит в проверках.
-
В CSV нет типов
Всё, что приходит из таблицы, — строка, включая «120» и «0».
-
Словарь помнит порядок
С версии 3.7 это гарантия языка, а не случайность — и ею можно пользоваться.
-
Убрать повторы, сохранив порядок
list(set(spisok)) убирает дубликаты и рушит порядок — что делать вместо.
-
Среднее средних — не среднее
Почему нельзя усреднять усреднённое и как это тихо портит отчёты.
-
Попробовать или проверить заранее
Когда пишут try, а когда обычное условие — и почему проверка заранее иногда просто неверна.
-
Что держать внутри try
Лишняя строка под защитой однажды превратит чужую ошибку в вашу.
-
split, partition и запятая внутри значения
Почему split(":") рассыпается на первом же двоеточии в тексте.
-
Скользящее окно
Как считать сумму по каждым семи дням подряд, не пересчитывая всё заново.
-
Жадный выбор и его предел
Брать лучшее прямо сейчас — работает почти всегда и иногда даёт не лучший ответ.
-
Файл без with
Почему open без with однажды кончается сообщением «слишком много открытых файлов».
-
filter и map с lambda
Почему list(filter(lambda x: ..., xs)) обычно пишут включением.
-
Сортировка ради одного элемента
sorted(xs)[0] упорядочивает весь список, чтобы взять одно значение.
-
k in d вместо k in d.keys()
Мелочь, за которой стоит понимание, как словарь ищет.
-
Подсчёт по условию одной строкой
Цикл со счётчиком, который умещается в sum.