Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from itertools import product, chain
- class DynamicProduct:
- def __init__(self, n):
- self.pools = [[] for _ in range(n)]
- self.gen = (x for x in [])
- self.exclusions = []
- def next(self):
- while True:
- res = next(self.gen, None)
- if res is None:
- return None
- bad = any(predicate(res) for predicate in self.exclusions)
- if not bad:
- return res
- def add(self, index, elem):
- self.pools[index].append(elem)
- gens = []
- for i in range(len(self.pools)):
- if i != index:
- gen = (x for x in self.pools[i])
- else:
- gen = [elem]
- gens.append(gen)
- prod = product(*gens)
- self.gen = chain(self.gen, prod)
- def delete(self, index, elem):
- self.pools[index].remove(elem)
- self.exclude(lambda x: x[index] == elem)
- def exclude(self, predicate):
- self.exclusions.append(predicate)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement