2011-04-28 7 views
6

Mam zakres liczb, takich jak 1-100. I mam zestaw, który posiada wszystkie lub losowy podzbiór liczb w tym zakresie, takie jak:Python znaleźć numery nie w zestawie

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

Jaki jest dobry sposób na zdobycie wszystkich numerów z zakresu 1-100, że nie jesteś w tym zestawie?

Odpowiedz

17

Zastosowanie operacja ustawiona różnica

set(range(1, 101)) - s 
13

Set różnica

set(range(1, 101)) - s 
5
all = set(range(1,101)) 
missing = all -s 
+6

Jak Pythona 2.5 'all' to nazwa wbudowaną funkcją. Możesz chcieć wybrać inne imię. –

3

Dodam wszystkie elementy nie w zestawie w postaci listy.

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 
+0

Być może masz na myśli 'zasięg (1101)'? –

+0

Er, tak. Prosta literówka. –

1

Chociaż brzydka jest bardziej wydajny niż ustawiona odchyłka:

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