← Все вопросы
Как посчитать, сколько элементов списка удовлетворяют условию?
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 месяцев назад
Ваш ответ
Войдите, чтобы ответить на вопрос.