पायथन में, शब्दकोश, सूची या सेट का उपयोग कब करना है?


294

मुझे एक शब्दकोश, सूची या सेट का उपयोग कब करना चाहिए?

क्या ऐसे परिदृश्य हैं जो प्रत्येक डेटा प्रकार के लिए अधिक अनुकूल हैं?

जवाबों:


603

एक listआदेश रखता है, dictऔर setनहीं: जब आप आदेश के बारे में परवाह करते हैं, इसलिए, आपको अवश्य उपयोग करना चाहिए list(यदि आपके कंटेनर की पसंद इन तक सीमित है, ज़ाहिर है; ;-)

dictप्रत्येक कुंजी के साथ एक सहयोगी होता है, जबकि listऔर setसिर्फ मूल्य होते हैं: बहुत अलग उपयोग के मामले, जाहिर है।

setवस्तुओं को धोने योग्य होने की आवश्यकता listनहीं है , यदि आपके पास गैर-धोने योग्य आइटम नहीं हैं, इसलिए, आप उपयोग नहीं कर सकते हैं setऔर इसके बजाय उपयोग करना चाहिए list

setफोर्ब्स डुप्लिकेट, listनहीं करता है: यह भी एक महत्वपूर्ण अंतर है। (एक "मल्टीसेट", जो मैप्स एक से अधिक बार मौजूद वस्तुओं के लिए एक अलग गिनती में डुप्लिकेट करता है, इसमें पाया जा सकता है collections.Counter- आप एक के रूप में निर्माण कर सकते हैं dict, अगर कुछ अजीब कारण के लिए आप आयात नहीं कर सकते हैं collections, या, पूर्व 2.7 में अजगर एक के रूप में collections.defaultdict(int), कुंजी के रूप में वस्तुओं का उपयोग करते हुए और गिनती के रूप में संबंधित मूल्य)।

किसी मान की सदस्यता के लिए जाँच set(या dict, कुंजियों के लिए) धधकते हुए तेजी से होती है (निरंतर, कम समय के बारे में), जबकि एक सूची में औसत और सबसे खराब मामलों में सूची की लंबाई के लिए आनुपातिक समय लगता है। इसलिए, यदि आपके पास धोने योग्य आइटम हैं, तो ऑर्डर या डुप्लिकेट के बारे में किसी भी तरह से परवाह न करें, और शीघ्र सदस्यता की जाँच करें, setसे बेहतर है list


6
ध्यान दें कि Python 3.7 ने डिफ़ॉल्ट रूप से आदेश दिया है
Gigi Bayte 2

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

30
एलेक्स एम। :-)
एलेक्स बॉशमैन्स

9
मुझे लगता है कि यह दूसरा तरीका है .. एलेक्स को जॉन को अपने वोट दान करने चाहिए। इस उत्तर में बहुत कुछ शामिल है और यह बहुत अधिक संक्षिप्त और स्पष्ट है।
mehmet

अगर, हालांकि, आप इन आंकड़ों प्रकार के बीच समय जटिलता अंतर जानना चाहते एलेक्स के स्पष्टीकरण बेहतर काम करता है
kcEmenike

19

जब आप अनूठे तत्वों का अनियंत्रित संग्रह चाहते हैं, तो एक का उपयोग करें set। (उदाहरण के लिए, जब आप किसी दस्तावेज़ में प्रयुक्त सभी शब्दों का सेट चाहते हैं)।

जब आप तत्वों की एक अपरिवर्तनीय क्रमबद्ध सूची एकत्र करना चाहते हैं, तो उपयोग करें tuple। (उदाहरण के लिए, जब आप एक (नाम, phone_number) जोड़ी चाहते हैं, जिसे आप एक सेट में एक तत्व के रूप में उपयोग करना चाहते हैं, तो आपको सूची के बजाय टपल की आवश्यकता होगी क्योंकि सेट के लिए तत्वों को अपरिवर्तनीय होना चाहिए)।

जब आप तत्वों की एक उत्परिवर्तित क्रमबद्ध सूची एकत्र करना चाहते हैं, का उपयोग करें list। (उदाहरण के लिए, जब आप एक सूची में नए फोन नंबर जोड़ना चाहते हैं: [नंबर 1, नंबर 2, ...])।

जब आप कुंजियों से मानों के लिए मैपिंग चाहते हैं, तो a का उपयोग करें dict। (उदाहरण के लिए, जब आप एक टेलीफोन बुक चाहते हैं जो फोन नंबरों के नाम मैप करती है:) {'John Smith' : '555-1212'}। ध्यान दें कि एक तानाशाही में चाबियाँ अनियंत्रित हैं। (यदि आप एक तानाशाह (टेलीफोन बुक) के माध्यम से पुनरावृत्ति करते हैं, तो चाबियाँ (नाम) किसी भी क्रम में दिखाई दे सकती हैं)।


उह, उन्होंने टुपल्स के बारे में नहीं पूछा।
१३:२० बजे २०

18
  • जब आप मानों के लिए मैप करने वाली अद्वितीय कुंजियों का एक सेट है, तो एक शब्दकोश का उपयोग करें।

  • यदि आपके पास आइटमों का ऑर्डर किया हुआ संग्रह है, तो एक सूची का उपयोग करें।

  • आइटम के अनियंत्रित सेट को संग्रहीत करने के लिए सेट का उपयोग करें।


6

संक्षेप में, उपयोग करें:

list - यदि आपको वस्तुओं के ऑर्डर किए गए अनुक्रम की आवश्यकता है।

dict - यदि आपको कुंजियों के साथ मूल्यों को संबंधित करना है

set - यदि आपको अद्वितीय तत्वों को रखने की आवश्यकता है।

विस्तृत विवरण

सूची

एक सूची एक परिवर्तनशील अनुक्रम है, जिसका उपयोग आमतौर पर सजातीय वस्तुओं के संग्रह को संग्रहीत करने के लिए किया जाता है।

एक सूची सभी सामान्य अनुक्रम संचालन को लागू करती है:

  • x in l तथा x not in l
  • l[i], l[i:j],l[i:j:k]
  • len(l), min(l),max(l)
  • l.count(x)
  • l.index(x[, i[, j]])- के 1 घटना के सूचकांक xमें lपर या के बाद ( iऔर इससे पहले किj indeces)

एक सूची भी सभी उत्परिवर्तनीय अनुक्रम संचालन को लागू करती है:

  • l[i] = x- आइटम iकीl द्वारा बदल दिया गया हैx
  • l[i:j] = t- का टुकड़ा lसे iकरने के लिएj iterable की सामग्री की जगहt
  • del l[i:j] - के समान l[i:j] = []
  • l[i:j:k] = t के तत्व - l[i:j:k] उन के द्वारा प्रतिस्थापित किया जाता हैt
  • del l[i:j:k] - के तत्वों को दूर करता है s[i:j:k] सूची से
  • l.append(x) - करता है x अनुक्रम के अंत में है
  • l.clear() - से सभी आइटम निकालता है l (डेल के समान l[:])
  • l.copy() - की उथली प्रति बनाता है l (उतनी ही l[:])
  • l.extend(t)या l += t- फैली हुई हैl की सामग्री के साथ हैt
  • l *= n - अपडेट l बार- nबार इसकी सामग्री के साथ
  • l.insert(i, x)- द्वारा दिए गए सूचकांक xमें आवेषणli
  • l.pop([i])- आइटम को पुनः प्राप्त करता है iऔर इसे हटा भी देता हैl
  • l.remove(x)- lजहां से पहला आइटम हटा देंl[i] x के बराबर है
  • l.reverse()- lजगह की वस्तुओं को उलट देता है

एक सूची के तरीकों का लाभ उठाते हुए ढेर के रूप में इस्तेमाल किया जा सकता appendहै औरpop

शब्दकोश

एक शब्दकोश में वस्तुओं को मनमाने ढंग से धोने के मूल्य हैं। एक शब्दकोश एक उत्परिवर्तनीय वस्तु है। एक शब्दकोश पर मुख्य संचालन कुछ कुंजी के साथ एक मूल्य का भंडारण कर रहे हैं और कुंजी को दिए गए मूल्य को निकाल रहे हैं।

एक शब्दकोश में, आप मुख्य मूल्यों के रूप में उपयोग नहीं कर सकते हैं जो कि धोने योग्य नहीं हैं, अर्थात, सूची, शब्दकोश या अन्य परिवर्तनशील प्रकार वाले मान।

सेट

एक सेट अलग-अलग धोने योग्य वस्तुओं का एक अनियंत्रित संग्रह है। एक सेट का उपयोग आमतौर पर सदस्यता परीक्षण को शामिल करने के लिए किया जाता है, एक अनुक्रम से डुप्लिकेट को हटाकर, और गणितीय संचालन जैसे कि चौराहे, संघ, अंतर और सममित अंतर को कंप्यूटिंग किया जाता है।


5

हालांकि यह setएस को कवर नहीं करता है , यह dictएस और listएस की एक अच्छी व्याख्या है :

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

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

http://www.sthurlow.com/python/lesson06/


4

सी ++ के लिए मैं हमेशा इस प्रवाह चार्ट को ध्यान में रख रहा था: मैं किस परिदृश्य में एक विशेष एसटीएल कंटेनर का उपयोग करता हूं?, तो मैं उत्सुक था अगर कुछ समान पायथन 3 के लिए भी उपलब्ध है, लेकिन मेरे पास कोई भाग्य नहीं था।

आपको पायथन के लिए ध्यान रखने की आवश्यकता है: C ++ के लिए कोई एकल पायथन मानक नहीं है। इसलिए विभिन्न पायथन दुभाषियों (जैसे CPython, PyPy) के लिए भारी अंतर हो सकते हैं। निम्न प्रवाह चार्ट CPython के लिए है।

साथ ही मेरे पास कोई अच्छा तरीका आरेख में निम्न डेटा संरचनाओं को शामिल करने के लिए मिला: bytes, byte arrays, tuples, named_tuples, ChainMap, Counter, और arrays

  • OrderedDictऔर dequeके माध्यम से उपलब्ध हैंcollections मॉड्यूल के ।
  • heapq से उपलब्ध है heapqमॉड्यूल
  • LifoQueue, Queueऔर मॉड्यूल के PriorityQueueमाध्यम से उपलब्ध हैं queueजो समवर्ती (थ्रेड्स) एक्सेस के लिए डिज़ाइन किया गया है। (वहाँ भी multiprocessing.Queueउपलब्ध है, लेकिन मैं मतभेदों को नहीं जानता, queue.Queueलेकिन यह मानूंगा कि इसका उपयोग तब किया जाना चाहिए जब प्रक्रियाओं से समवर्ती पहुंच की आवश्यकता हो।)
  • dict, set, frozen_set, और listनिश्चित रूप से कर रहे हैं builtin

यदि आप इस उत्तर को सुधार सकते हैं और हर पहलू में एक बेहतर आरेख प्रदान कर सकते हैं तो किसी के लिए भी मैं आभारी रहूंगा। बेझिझक और स्वागत है। प्रवाह संचित्र

पुनश्च: चित्र को येड के साथ बनाया गया है। ग्राफल फाइल यहाँ है


3

सूचियों , dicts और सेटों के संयोजन में , एक और दिलचस्प अजगर ऑब्जेक्ट्स, ऑर्डरडेडिकट्स भी हैं

ऑर्डर किए गए शब्दकोश नियमित शब्दकोशों की तरह हैं, लेकिन वे उस आदेश को याद करते हैं जो आइटम सम्मिलित किए गए थे। जब एक ऑर्डर किए गए शब्दकोश में पुनरावृत्ति होती है, तो आइटम उस क्रम में वापस आ जाते हैं, जब उनकी चाबियाँ पहले जोड़ी जाती थीं।

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


1

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

tuples केवल सूचियों की तरह हैं, लेकिन आप उनके मूल्यों को नहीं बदल सकते। जो मूल्य आप इसे पहले देते हैं, वे मूल्य हैं जो आप बाकी प्रोग्राम के लिए अटके हुए हैं। फिर, प्रत्येक मूल्य को शून्य से शुरू किया जाता है, आसान संदर्भ के लिए। उदाहरण: वर्ष के महीनों के नाम।

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


1

उनका उपयोग करते समय, मैं आपके संदर्भ के लिए उनके तरीकों की एक विस्तृत धोखा देती हूं:

class ContainerMethods:
    def __init__(self):
        self.list_methods_11 = {
                    'Add':{'append','extend','insert'},
                    'Subtract':{'pop','remove'},
                    'Sort':{'reverse', 'sort'},
                    'Search':{'count', 'index'},
                    'Entire':{'clear','copy'},
                            }
        self.tuple_methods_2 = {'Search':'count','index'}

        self.dict_methods_11 = {
                    'Views':{'keys', 'values', 'items'},
                    'Add':{'update'},
                    'Subtract':{'pop', 'popitem',},
                    'Extract':{'get','setdefault',},
                    'Entire':{ 'clear', 'copy','fromkeys'},
                            }
        self.set_methods_17 ={
                    'Add':{['add', 'update'],['difference_update','symmetric_difference_update','intersection_update']},
                    'Subtract':{'pop', 'remove','discard'},
                    'Relation':{'isdisjoint', 'issubset', 'issuperset'},
                    'operation':{'union' 'intersection','difference', 'symmetric_difference'}
                    'Entire':{'clear', 'copy'}}

1

शब्दकोश: एक पायथन डिक्शनरी का उपयोग हैश तालिका की तरह किया जाता है, जिसका मूल्य सूचकांक और मूल्य के रूप में होता है।

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

सेट: एक सेट फ़ंक्शन के साथ एक संग्रह है जो यह बता सकता है कि कोई ऑब्जेक्ट सेट में मौजूद है या नहीं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.