Python найти номера не в наборе - PullRequest
10 голосов
/ 28 апреля 2011

У меня есть ряд чисел, таких как 1-100.И у меня есть набор, который содержит все или случайное подмножество чисел в этом диапазоне, например:

s = set([1,2,3,35,67,87,95])

Что является хорошим способом получить все числа в диапазоне1-100, которых нет в этом наборе?

Ответы [ 5 ]

20 голосов
/ 28 апреля 2011

Использовать заданную разницу операций

set(range(1, 101)) - s
13 голосов
/ 28 апреля 2011

Установленная разница

set(range(1, 101)) - s
5 голосов
/ 28 апреля 2011

Я бы добавил в список все предметы, не входящие в набор.

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
5 голосов
/ 28 апреля 2011
all = set(range(1,101))
missing = all -s
2 голосов
/ 23 августа 2011

Хотя уродливо, это более эффективно, чем заданная разница:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...