Счетчик просмотров59

any, all и генераторные выражения

Оглавление
Проверка «хотя бы один» и «все»Генераторное выражение внутриЗаменяет громоздкие циклы с флагомЛенивость экономит времяПример с ЕГЭ: задание 25Пример с ЕГЭ: задание 15Пример с ЕГЭ: задание 9 и таблицы

Проверка «хотя бы один» и «все»

ФункцияВернёт True, если…
any(...)хотя бы один элемент истинный
all(...)все элементы истинные
PYTHON-КОД
1
2
3
4

Генераторное выражение внутри

Внутри any и all пишут генераторное выражение — почти как списочное, но без квадратных скобок. Оно проверяет элементы по очереди, не строя весь список:

PYTHON-КОД
1
2
Баннер статьи

Заменяет громоздкие циклы с флагом

Раньше такую проверку писали через переменную-флаг. Сначала объявляли False, потом в цикле искали подходящий элемент и переключали флаг: 

PYTHON-КОД
1
2
3
4
5
6

Ровно то же самое any делает одной строкой: 

PYTHON-КОД
1

Для проверки «все элементы подходят» флаг заводили наоборот — начинали с True и сбрасывали при первом нарушении:

PYTHON-КОД
1
2
3

 

Сравнение двух записей:

По-старомуОдной строкой
флаг False, ищем подходящийany(условие for x in a)
флаг True, ищем нарушениеall(условие for x in a)

Обрати внимание на инверсию условия: в цикле с флагом для all пишут if x <= 0, то есть противоположное условие, а внутри all — прямое x > 0. Именно на этой инверсии чаще всего ошибаются, когда переписывают цикл вручную.

Ленивость экономит время

any останавливается на первом истинном элементе, all — на первом ложном. Это ленивое вычисление: лишнюю работу Python не делает, поэтому на больших данных проверки быстрые.

Пример с ЕГЭ: задание 25

Формулировка: «Найдите числа диапазона, у которых все цифры различны и при этом есть хотя бы одна чётная цифра».

PYTHON-КОД
1
2
3
4

Здесь any заменяет отдельный цикл поиска чётной цифры, а условие про различные цифры удобнее проверить через множество.

Пример с ЕГЭ: задание 15

В задании 15 all — основной инструмент: он буквально означает «истинно для любого x».

PYTHON-КОД
1
2
3
4
5
6

 

Формулировке «существует такое x» соответствует any — меняется только имя функции.

Пример с ЕГЭ: задание 9 и таблицы

Проверки по строке таблицы тоже записываются одной строкой:

PYTHON-КОД
1
2
3

 

Оцените статью

Другие статьи по предмету

Другие статьи не найдены