rendered paste bodydef 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()