2011-01-20 12 views
7

मेरे पास एक वर्ग है जिसमें तारों की एक सूची है। कहें:सूची सुनिश्चित करने के लिए कैसे अद्वितीय तत्व हैं?

ClassName: 
- list_of_strings 

मुझे यह लागू करने की आवश्यकता है कि तारों की इस सूची में अद्वितीय तत्व हैं। दुर्भाग्यवश, मैं इस सूची_of_strings को किसी अन्य प्रकार में सेट नहीं कर सकता।

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

def addToList(self, str_to_add): 
    self.list_of_strings.append(str_to_add) 

धन्यवाद:

यहाँ विधि मैं अद्यतन करने की आवश्यकता है!

+0

* क्यों * आप एक सेट का उपयोग नहीं कर सकते? ऐसा लगता है कि यहां उचित डेटा प्रकार है। –

+0

सूची क्रमबद्ध क्रम में हो सकती है? यदि ऐसा है, तो आप एक बाइनरी खोज का उपयोग कर सकते हैं। अन्यथा, आप कुछ रैखिक-ऑर्डर एल्गोरिदम के साथ फंस गए हैं, इसलिए पूर्ण गति की आवश्यकता नहीं होने पर एक सेट में कनवर्ट करना सबसे आसान बात हो सकती है। – chrisaycock

+0

संभवतः वह आदेश को संरक्षित करना चाहता है, या पहले से ही कोड है जो एक सेट के बजाए आदेशित सूची की अपेक्षा करता है। एक आदेश दिया गया सेट या अद्वितीय सूची एक उचित डेटा प्रकार है। – bnaul

उत्तर

21
def addToList(self, str_to_add): 
    if str_to_add not in self.list_of_strings: 
     self.list_of_strings.append(str_to_add) 
+0

आह ... आप सही हैं और मैंने वर्णित समस्या के लिए यह सही है। शर्मनाक रूप से, मुझे अभी एहसास हुआ कि मैंने अपनी समस्या को गलत बताया है और जो मुद्दा मैं कर रहा हूं वह पूरी तरह अलग है। – Cuga

1

आप वास्तव में सूची करने के लिए सेट करने के लिए सूची आपरेशन आप वर्णित कर सकता है, लेकिन आप भी अगर तत्व यह जोड़कर से पहले सूची में पहले से ही है की जाँच करने के in ऑपरेटर इस्तेमाल कर सकते हैं।

4

या तो in के साथ सूची में स्ट्रिंग की उपस्थिति की जांच करें, या set का उपयोग समानांतर में करें जिसे आप चेक और जोड़ सकते हैं।

+0

समांतर सेट एक दिलचस्प विचार है। – kindall

+0

यह लुकअप के मामले में शायद अधिक कुशल है, खासकर अगर सूची बड़ी है। – ffledgling

0

ऐसा करने का एक संभावित तरीका हैश सेट बनाने और सूची के माध्यम से पुनरावृत्ति करना, सेट में तत्व जोड़ना; किसी भी डुप्लिकेट को हटाने के लिए एक दूसरा पुनरावृत्ति का उपयोग किया जा सकता है।

0

शायद हम इस तरह कर सकते हैं:

डीईएफ़ addToList (स्वयं, str_to_add):

try: 
    self.list_of_strings.index(str_to_add) 
except: 
    self.list_of_strings.append(str_to_add) 

ठीक है, मैं चाहे वह अगर/और नहीं के साथ एक ही तंत्र है पता नहीं है।

संबंधित मुद्दे