2013-02-02 21 views
26

में एक सूची में मौजूद है या नहीं, मैं एक पायथन कोड लिख रहा हूं जहां मैं सूची में नंबर जोड़ रहा हूं, लेकिन मैं नहीं चाहता कि सूची में संख्या दोहराने के लिए। तो list.append() करने से पहले, मैं कैसे जांच सकता हूं कि सूची में कोई संख्या पहले से मौजूद है या नहीं?जांचें कि क्या कोई संख्या पहले से ही पाइथन

+1

क्यों न केवल 'सेट' का उपयोग करें? – loganfsmyth

उत्तर

55

आप

if item not in mylist: 
    mylist.append(item) 

कर सकता है लेकिन क्या तुम सच में इस तरह एक सेट है, का उपयोग करना चाहिए:

myset = set() 
myset.add(item) 

संपादित करें: हैं क्रम महत्वपूर्ण है लेकिन आपकी सूची बहुत बड़ी है, तो आप शायद चाहिए एक सूची और दोनों सेट का उपयोग करें, जैसे:

mylist = [] 
myset = set() 
for item in ...: 
    if item not in myset: 
     mylist.append(item) 
     myset.add(item) 

इस तरह, आप तत्व अस्तित्व के लिए तेज़ लुकअप प्राप्त करते हैं, लेकिन आप अपना ऑर्डरिंग रखते हैं। यदि आप निष्पक्ष समाधान का उपयोग करते हैं, तो आपको लुकअप के लिए ओ (एन) प्रदर्शन मिलेगा, और यदि आपकी सूची बड़ी है तो

या, जैसा कि @ लार्समैन ने इंगित किया है, आप ऑर्डर्ड डिक्ट का उपयोग उसी प्रभाव से कर सकते हैं:

from collections import OrderedDict 

mydict = OrderedDict() 
for item in ...: 
    mydict[item] = True 
+1

'सेट' के लिए 'एपेंड' जैसी कोई विधि नहीं है। आप निश्चित रूप से 'add' मतलब था। –

+1

फिर से, सेट * ऑर्डरलेस * हैं, इसलिए यह बराबर नहीं है। –

+0

धन्यवाद, –

7

आप अपनी सूची में अद्वितीय तत्व करना चाहते हैं, तो क्यों एक सेट का उपयोग नहीं, निश्चित रूप से अगर, ताकि आप के लिए कोई प्रभाव नहीं पड़ेगा: -

>>> s = set() 
>>> s.add(2) 
>>> s.add(4) 
>>> s.add(5) 
>>> s.add(2) 
>>> s 
39: set([2, 4, 5]) 

हैं क्रम चिंता का विषय है, तो आप उपयोग कर सकते हैं: -

>>> def addUnique(l, num): 
...  if num not in l: 
...   l.append(num) 
...  
...  return l 

तुम भी एक OrderedSet नुस्खा है, जो Python Documentation

+0

ध्यान दें कि यदि आदेश महत्वपूर्ण है तो यह काम नहीं करेगा। –

+0

@ लैटवेयर .. बेशक। उस बिंदु जोड़ा गया। –

+0

इसलिए यदि मैं संख्याओं को आरोही क्रमबद्ध करना चाहता हूं, तो मुझे ऐसा करना होगा? क्या आप उस हिस्से को थोड़ा और समझा सकते हैं? (हाँ मुझे ऑर्डर करने वाला सेट होना है) – PhoonOne

1

में आप शायद एक सेट वस्तु के बजाय इस्तेमाल कर सकते हैं कहा जाता है पा सकते हैं। बस सेट करने के लिए add नंबर। वे स्वाभाविक रूप से दोहराना नहीं करते हैं।

2

यदि आप अपनी संख्या आरोही क्रम में चाहते हैं तो आप उन्हें एक सेट में जोड़ सकते हैं और फिर सेट को आरोही सूची में सॉर्ट कर सकते हैं।

s = set() 
if number1 not in s: 
    s.add(number1) 
if number2 not in s: 
    s.add(number2) 
... 
s = sorted(s) #Now a list in ascending order