2012-09-10 11 views
26

पायथन में सेट और सूचियों के बीच एकमात्र अंतर यह तथ्य है कि आप दो सेटों की तुलना करने के लिए यूनियन, अंतरण, अंतर, सममित अंतर फ़ंक्शंस का उपयोग कर सकते हैं? इन कार्यों को सूचियों पर क्यों लागू नहीं किया जा सकता है? सूचियों की तुलना में कौन सी परिस्थितियां सेट अधिक उपयोगी होती हैं?पायथन में सेट और सूचियों के बीच क्या अंतर है?

+1

सेट, परिभाषा के द्वारा, डुप्लिकेट मानों नहीं होते हैं; मुझे लगता है कि पाइथन, अन्य भाषाओं की तरह, सूची में डुप्लिकेट प्रविष्टियों की अनुमति देगा। –

+1

यह दस्तावेज़ीकरण में बहुत अच्छी तरह से रखा गया है। [सेट] (http://docs.python.org/tutorial/datastructures.html#sets) और [सूचियां] (http://docs.python.org/tutorial/datastructures.html#more-on-lists) –

उत्तर

54

एक बड़ा अंतर है।

  1. सेट डुप्लिकेट नहीं हो सकते
  2. सेट अव्यवस्थित
  3. आदेश एक सेट में एक तत्व खोजने के लिए, एक हैश देखने प्रयोग किया जाता है (जिसके कारण सेट अव्यवस्थित हैं)। यह __contains__ (in ऑपरेटर) सूचियों से सेट के लिए बहुत अधिक कुशल बनाता है।
  4. सेट में केवल हैशबल आइटम हो सकते हैं (देखें # 3)। यदि आप कोशिश करते हैं: set(([1],[2])) आपको TypeError मिल जाएगा।

व्यावहारिक अनुप्रयोगों में, सूचियों को क्रमबद्ध करने के लिए बहुत अच्छा होता है और ऑर्डर होता है जबकि सेट डुप्लिकेट नहीं चाहते हैं और ऑर्डर की परवाह नहीं करते हैं।

यह भी ध्यान रखें कि यदि आप, आदि के क्रम के बारे में परवाह नहीं है, आप

new_set = myset.intersection(mylist) 

उपयोग कर सकते हैं एक set और एक list के बीच चौराहे मिलता है।

+2

इसके अलावा, सेट में केवल वे ऑब्जेक्ट्स हो सकती हैं जो हैंशबल हैं; सूचियों में किसी भी प्रकार की वस्तु हो सकती है। – kindall

+0

@kindall - यह # 3 के स्पष्टीकरण में निहित है, लेकिन मैंने इसे अधिक स्पष्ट बनाने के लिए इसे # 4 के रूप में जोड़ा है। टिप्पणी के लिए धन्यवाद। – mgilson

5

sets - अद्वितीय तत्व

lists की अक्रमित संग्रह - तत्वों के संग्रह का आदेश दिया

sets आप संचालन करने की अनुमति देता ऐसी intersection, union, difference, और symmetric difference, गणित के सेट सिद्धांत की यानी आपरेशन के रूप में। सेट इंडेक्सिंग की अनुमति नहीं देता है और हैश टेबल पर लागू किया जाता है।

lists वास्तव में चर-लंबाई वाली सरणी हैं, लिस्पी-स्टाइल लिंक्ड सूचियों नहीं। सूचियों में तत्वों को इंडेक्स द्वारा एक्सेस किया जाता है।

2

कुछ और अंतर हैं:

  1. सूची 2-डी हो सकता है एक सेट जबकि नहीं कर सकता।
  2. सूची के अनुसार आदेश दिया गया है (आईई। सीरियल नंबर है) सूची निष्पादित करने के लिए अपेक्षाकृत धीमी है जबकि सेट तेज़ हैं।
  3. पायथन में सूची जावा या सी के ऐरे की तरह है।
  4. एक सेट प्रिंट करना लगभग हमेशा उत्पादन के विभिन्न अनुक्रम प्रदान करता है।
+1

एक सेट जितना समय तक आप चाहते हैं उतने आयामों का हो सकता है जब तक आप 'फ्रोजनसेट' – Copperfield

2

सेट विशिष्ट तत्वों के संग्रह का प्रतिनिधित्व करता है।

  1. तेजी से आपरेशन के लिए:: अजगर में, सेट मुख्य रूप से दो कारणों से (: स्क्रैच से डाटा विज्ञान, जोएल Gruce पुस्तक) के लिए उपयोग किया जाता है में सेट पर एक बहुत तेज ऑपरेशन है।यदि हमारे पास तत्वों का एक बड़ा संग्रह है और यदि हम सदस्यता परीक्षण करना चाहते हैं, तो उस स्थिति में सूची के बजाय सेट का उपयोग करना उचित है।

  2. संग्रह में एक अलग आइटम खोजने के लिए। प्रोग्रामर डिक्ट्स और सूचियों की तुलना में बहुत कम बार सेट करते हैं।

2

अजगर सेट:

सेट अद्वितीय आइटम का एक अव्यवस्थित संग्रह है। सेट को ब्रेसिज़ {} के अंदर अल्पविराम से अलग मूल्यों द्वारा परिभाषित किया जाता है। एक सेट में आइटम का आदेश नहीं दिया जाता है।

सेट अनियंत्रित संग्रह हैं, अनुक्रमण का कोई मतलब नहीं है। इसलिए स्लाइसिंग ऑपरेटर [] काम नहीं करता है।

>>> a = {1,2,2,3,3,3} 
>>> a 
set([1, 2, 3]) 
>>> a[1] 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: 'set' object does not support indexing 

अजगर सूची:

सूची आइटम के एक आदेश दिया अनुक्रम है। यह पायथन में सबसे अधिक इस्तेमाल किए जाने वाले डेटाटाइप में से एक है और यह बहुत लचीला है। सूची में सभी वस्तुओं को एक ही प्रकार की आवश्यकता नहीं है।

एक सूची घोषित करना काफी सीधे आगे है। अल्पविराम से अलग आइटम ब्रैकेट के भीतर संलग्न होते हैं []।

>>> a = [1, 2.2, 'python'] 

हम टुकड़ा करने की क्रिया ऑपरेटर [] का उपयोग एक आइटम या एक सूची से आइटम की एक सीमा को निकालने के लिए कर सकते हैं। सूचकांक पायथन में फॉर्म 0 शुरू होता है।

सूचियां उत्परिवर्तनीय हैं, यानी, सूची के तत्वों के मूल्य को बदला जा सकता है।

Reference