':return: An iterator over the permutations of the input list
:type lst: list
:rtype: iter'

def _permute(self, lst):

    remove = (lambda lst0, index: (lst0[:index] + lst0[(index + 1):]))
    if lst:
        for (index, x) in enumerate(lst):
            for y in self._permute(remove(lst, index)):
                (yield ((x,) + y))
    else:
        (yield ())
