Get number of items from list (or other iterable) with certain condition
count, functional-programming, list, python, sequence
Solution
You can use a generator expression:
>>> l = [1, 3, 7, 2, 6, 8, 10]
>>> sum(1 for i in l if i % 4 == 3)
2
or even
>>> sum(i % 4 == 3 for i in l)
2
which uses the fact that `True == 1` and `False == 0`.
Alternatively, you could use `itertools.imap` (python 2) or simply `map` (python 3):
>>> def my_condition(x):
... return x % 4 == 3
...
>>> sum(map(my_condition, l))
2
Problem
Assuming that I have a list with a huge number of items, ``` l = [ 1, 4, 6, 30, 2, ... ] ``` I want to get the number of items from that list, where an item satisfies a certain condition. My first thought was: ``` count = len([i for i in l if my_condition(l)]) ``` But if the filtered list also has a great number of items, I think that creating a new list for the filtered result is just a waste of memory. For efficiency, IMHO, the above call can't be better than: ``` count = 0 for i in l: if my_condition(l): count += 1 ``` Is there any functional-style way to get the # of items that satisfy the condition without generating a temporary list?