← Все вопросы

Как посчитать, сколько элементов списка удовлетворяют условию?

Задан 6 месяцев назад672 просмотров3 ответа
16

Есть список чисел, хочу узнать, сколько из них больше 10. Сейчас завёл счётчик и цикл с if. Можно ли короче, в одну строку?

3 ответа

24
✓ Принятый ответ — помог автору

Да, классический приём sum(1 for ...):

a = [3, 17, 8, 25, 11]
n = sum(1 for x in a if x > 10)
print(n)   # 3

sum складывает по единице за каждый элемент, который прошёл условие if. Работает, потому что генератор отдаёт 1 только для подходящих элементов. Альтернатива через булевы значения: sum(x > 10 for x in a) — здесь True считается за 1, False за 0, тоже даёт 3.

Анастасия Гусева Второй вариант (sum по bool) ещё короче, но первый понятнее новичкам · 6 месяцев назад
8

len([x for x in a if x > 10]) тоже работает, но строит лишний список в памяти. sum(1 for ...) ничего не накапливает — для больших данных предпочтительнее.

-1

sum(map(lambda x: x > 10, a)).

Алексей Царев Работает, но лямбда тут лишняя, генератор читается лучше · 6 месяцев назад

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект