All pastes #817725 Raw Edit

Stuff

public python v1 · immutable
·published 2007-12-15 20:56 UTC
rendered paste body
def CombinationEnumerator(listObj, selection) :    class CombEnum(object) :        def __init__(self, listObj, selection) :            assert selection <= len(listObj)            self.items = listObj            self.route = ([True, ]*selection) + [False, ]*(len(listObj)-selection)            self.selection = selection        def value(self) :            result = [ val for flag, val in zip(self.route, self.items) if flag ]            return result        def next(self) :            try :                while self.route[-1] :                    self.route.pop()                while not self.route[-1] :                    self.route.pop()            except :                return False            self.route[-1] = False            count = self.route.count(True)            self.route.extend( (self.selection - count) * [True,] )            padding = len(self.items) - len(self.route)            self.route.extend( padding * [False, ])            return True    if selection == 0 :        yield []        return    rotor = CombEnum(listObj, selection)    yield rotor.value()    while rotor.next() :        yield rotor.value()