У меня есть ряд чисел, таких как 1-100.И у меня есть набор, который содержит все или случайное подмножество чисел в этом диапазоне, например:
s = set([1,2,3,35,67,87,95])
Что является хорошим способом получить все числа в диапазоне1-100, которых нет в этом наборе?
Использовать заданную разницу операций
set(range(1, 101)) - s
Установленная разница
Я бы добавил в список все предметы, не входящие в набор.
s = set([1,2,3,35,67,87,95]) x = [] for item in range(1, 101): if item not in s: x.append(item) print x
all = set(range(1,101)) missing = all -s
Хотя уродливо, это более эффективно, чем заданная разница:
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