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())


[2, 4]
[2, 4]

In [ ]: