In [28]:
class Select(object):
def __init__(self, *args):
self.sequence = Select.flatten(*args)
self.filter_functions = []
@staticmethod
def flatten(*sequence):
result = []
for entry in sequence:
if isinstance(entry, list):
result +=Select.flatten(*entry)
elif isinstance(entry, tuple):
result +=Select.flatten(*entry)
else:
result.append(entry)
return result
def where(self, filter_function):
"""Register a filter function."""
self.filter_functions.append(filter_function)
return self
def build(self):
result = []
for entry in self.sequence:
ignore = False
for filter_function in self.filter_functions:
if not filter_function(entry):
ignore = True
break
if not ignore:
result.append(entry)
return result
print(Select(1, 2, 3, 4).where(lambda n: n % 2 == 0).build())
print(Select([1, 2, 3, 4]).where(lambda n: n % 2 == 0).build())
In [ ]: