2011-04-28 11 views
6

में नहीं मिलती है मेरे पास 1-100 जैसी संख्याएं हैं। और मैं एक सेट है कि सभी रखती है, या इस तरह के रूप में है कि सीमा में संख्या के एक यादृच्छिक सबसेट है:पायथन को संख्या

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

क्या रेंज 1-100 में संख्या के सभी प्राप्त करने के लिए एक अच्छा तरीका है कि उस सेट में नहीं हैं?

उत्तर

17

उपयोग सेट अंतर आपरेशन

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

सेट अंतर

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

अजगर 2.5 के रूप में 'all' निर्मित एक समारोह का नाम है। आप एक और नाम चुनना चाह सकते हैं। –

3

मैं एक सूची में सेट में नहीं सभी आइटम जोड़ना होगा।

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

शायद आप का मतलब है 'रेंज (1,101) '? –

+0

एर, हाँ। एक साधारण टाइपो। –

1

हालांकि बदसूरत यह सेट अंतर से अधिक कुशल है:

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 
संबंधित मुद्दे