Complementary function filterfalse, ifilterfalse
suggest changeThere is a complementary function for filter
in the itertools
-module:
# not recommended in real use but keeps the example valid for python 2.x and python 3.x
from itertools import ifilterfalse as filterfalse
from itertools import filterfalse
which works exactly like the generator filter
but keeps only the elements that are False
:
# Usage without function (None):
list(filterfalse(None, [1, 0, 2, [], '', 'a'])) # discards 1, 2, 'a'
# Out: [0, [], '']
Usage with function
names = [‘Fred’, ‘Wilma’, ‘Barney’]
def long_name(name):
return len(name) > 5
list(filterfalse(long_name, names)) # Out: [‘Fred’, ‘Wilma’]
Short-circuit usage with next:
car_shop = [('Toyota', 1000), ('rectangular tire', 80), ('Porsche', 5000)]
def find_something_smaller_than(name_value_tuple):
print('Check {0}, {1}$'.format(*name_value_tuple)
return name_value_tuple[1] < 100
next(filterfalse(find_something_smaller_than, car_shop))
# Print: Check Toyota, 1000$
# Out: ('Toyota', 1000)
Using an equivalent generator:
car_shop = [('Toyota', 1000), ('rectangular tire', 80), ('Porsche', 5000)]
generator = (car for car in car_shop if not car[1] < 100)
next(generator)
Found a mistake? Have a question or improvement idea?
Let me know.
Table Of Contents