Despite the ugliness, it is more effective than the established difference:
def not_in_set (s, min = 0): '''Returns all elements starting from min not in s. ''' n = len(s) if n > 0: l = sorted(s) for x in range(min, l[0]): yield x for i in range(0, n - 1): for x in range(l[i] + 1, l[i + 1]): yield x r = l.pop() + 1 else: r = min while True: yield r r += 1
source share