जवाबों:
एक 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
।
जब आप अनूठे तत्वों का अनियंत्रित संग्रह चाहते हैं, तो एक का उपयोग करें set
। (उदाहरण के लिए, जब आप किसी दस्तावेज़ में प्रयुक्त सभी शब्दों का सेट चाहते हैं)।
जब आप तत्वों की एक अपरिवर्तनीय क्रमबद्ध सूची एकत्र करना चाहते हैं, तो उपयोग करें tuple
। (उदाहरण के लिए, जब आप एक (नाम, phone_number) जोड़ी चाहते हैं, जिसे आप एक सेट में एक तत्व के रूप में उपयोग करना चाहते हैं, तो आपको सूची के बजाय टपल की आवश्यकता होगी क्योंकि सेट के लिए तत्वों को अपरिवर्तनीय होना चाहिए)।
जब आप तत्वों की एक उत्परिवर्तित क्रमबद्ध सूची एकत्र करना चाहते हैं, का उपयोग करें list
। (उदाहरण के लिए, जब आप एक सूची में नए फोन नंबर जोड़ना चाहते हैं: [नंबर 1, नंबर 2, ...])।
जब आप कुंजियों से मानों के लिए मैपिंग चाहते हैं, तो a का उपयोग करें dict
। (उदाहरण के लिए, जब आप एक टेलीफोन बुक चाहते हैं जो फोन नंबरों के नाम मैप करती है:) {'John Smith' : '555-1212'}
। ध्यान दें कि एक तानाशाही में चाबियाँ अनियंत्रित हैं। (यदि आप एक तानाशाह (टेलीफोन बुक) के माध्यम से पुनरावृत्ति करते हैं, तो चाबियाँ (नाम) किसी भी क्रम में दिखाई दे सकती हैं)।
संक्षेप में, उपयोग करें:
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
में आवेषणl
i
l.pop([i])
- आइटम को पुनः प्राप्त करता है i
और इसे हटा भी देता हैl
l.remove(x)
- l
जहां से पहला आइटम हटा देंl[i]
x के बराबर हैl.reverse()
- l
जगह की वस्तुओं को उलट देता हैएक सूची के तरीकों का लाभ उठाते हुए ढेर के रूप में इस्तेमाल किया जा सकता append
है औरpop
।
एक शब्दकोश में वस्तुओं को मनमाने ढंग से धोने के मूल्य हैं। एक शब्दकोश एक उत्परिवर्तनीय वस्तु है। एक शब्दकोश पर मुख्य संचालन कुछ कुंजी के साथ एक मूल्य का भंडारण कर रहे हैं और कुंजी को दिए गए मूल्य को निकाल रहे हैं।
एक शब्दकोश में, आप मुख्य मूल्यों के रूप में उपयोग नहीं कर सकते हैं जो कि धोने योग्य नहीं हैं, अर्थात, सूची, शब्दकोश या अन्य परिवर्तनशील प्रकार वाले मान।
एक सेट अलग-अलग धोने योग्य वस्तुओं का एक अनियंत्रित संग्रह है। एक सेट का उपयोग आमतौर पर सदस्यता परीक्षण को शामिल करने के लिए किया जाता है, एक अनुक्रम से डुप्लिकेट को हटाकर, और गणितीय संचालन जैसे कि चौराहे, संघ, अंतर और सममित अंतर को कंप्यूटिंग किया जाता है।
हालांकि यह set
एस को कवर नहीं करता है , यह dict
एस और list
एस की एक अच्छी व्याख्या है :
सूची वे हैं जो वे लगती हैं - मूल्यों की एक सूची। उनमें से प्रत्येक को गिना जाता है, शून्य से शुरू होता है - पहला एक शून्य है, दूसरा 1, तीसरा 2, आदि। आप सूची से मान हटा सकते हैं, और अंत में नए मान जोड़ सकते हैं। उदाहरण: आपकी कई बिल्लियों के नाम।
शब्दकोश जैसा कि उनके नाम से पता चलता है - एक शब्दकोश। एक शब्दकोश में, आपके पास शब्दों का एक 'सूचकांक' है, और उनमें से प्रत्येक के लिए एक परिभाषा है। अजगर में, शब्द को एक 'कुंजी' कहा जाता है, और परिभाषा एक 'मूल्य'। एक शब्दकोश में मानों को गिना नहीं गया है - उनके नाम के समान है - एक शब्दकोश। एक शब्दकोश में, आपके पास शब्दों का एक 'सूचकांक' है, और उनमें से प्रत्येक के लिए एक परिभाषा है। किसी शब्दकोश के मानों की संख्या नहीं है - वे किसी भी विशिष्ट क्रम में नहीं हैं, या तो - कुंजी एक ही काम करती है। आप शब्दकोशों में मूल्यों को जोड़ सकते हैं, हटा सकते हैं और संशोधित कर सकते हैं। उदाहरण: टेलीफोन बुक।
सी ++ के लिए मैं हमेशा इस प्रवाह चार्ट को ध्यान में रख रहा था: मैं किस परिदृश्य में एक विशेष एसटीएल कंटेनर का उपयोग करता हूं?, तो मैं उत्सुक था अगर कुछ समान पायथन 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यदि आप इस उत्तर को सुधार सकते हैं और हर पहलू में एक बेहतर आरेख प्रदान कर सकते हैं तो किसी के लिए भी मैं आभारी रहूंगा। बेझिझक और स्वागत है।
पुनश्च: चित्र को येड के साथ बनाया गया है। ग्राफल फाइल यहाँ है
सूचियों , dicts और सेटों के संयोजन में , एक और दिलचस्प अजगर ऑब्जेक्ट्स, ऑर्डरडेडिकट्स भी हैं ।
ऑर्डर किए गए शब्दकोश नियमित शब्दकोशों की तरह हैं, लेकिन वे उस आदेश को याद करते हैं जो आइटम सम्मिलित किए गए थे। जब एक ऑर्डर किए गए शब्दकोश में पुनरावृत्ति होती है, तो आइटम उस क्रम में वापस आ जाते हैं, जब उनकी चाबियाँ पहले जोड़ी जाती थीं।
जब आप दस्तावेज़ों के साथ काम कर रहे हों, तो ऑर्डरडाइसीट उपयोगी हो सकता है, उदाहरण के लिए, दस्तावेज़ों के साथ काम करना: दस्तावेज़ में सभी शर्तों के सदिश प्रतिनिधित्व की आवश्यकता आम है। तो ऑर्डरडिकट्स का उपयोग करके आप कुशलतापूर्वक यह सत्यापित कर सकते हैं कि क्या कोई शब्द पहले पढ़ा गया है, शब्द जोड़ें, शब्द निकालें, और सभी जोड़तोड़ के बाद आप उनमें से आदेशित वेक्टर प्रतिनिधित्व निकाल सकते हैं।
सूचियाँ वे हैं जो उन्हें लगती हैं - मूल्यों की एक सूची। उनमें से प्रत्येक को गिना जाता है, शून्य से शुरू होता है - पहला एक शून्य है, दूसरा 1, तीसरा 2, आदि। आप सूची से मान हटा सकते हैं, और अंत में नए मान जोड़ सकते हैं। उदाहरण: आपकी कई बिल्लियों के नाम।
tuples केवल सूचियों की तरह हैं, लेकिन आप उनके मूल्यों को नहीं बदल सकते। जो मूल्य आप इसे पहले देते हैं, वे मूल्य हैं जो आप बाकी प्रोग्राम के लिए अटके हुए हैं। फिर, प्रत्येक मूल्य को शून्य से शुरू किया जाता है, आसान संदर्भ के लिए। उदाहरण: वर्ष के महीनों के नाम।
शब्दकोश जैसा कि उनके नाम से पता चलता है - एक शब्दकोश। एक शब्दकोश में, आपके पास शब्दों का एक 'सूचकांक' है, और उनमें से प्रत्येक के लिए एक परिभाषा है। अजगर में, शब्द को एक 'कुंजी' कहा जाता है, और परिभाषा एक 'मूल्य'। एक शब्दकोश में मानों को गिना नहीं गया है - उनके नाम के समान है - एक शब्दकोश। एक शब्दकोश में, आपके पास शब्दों का एक 'सूचकांक' है, और उनमें से प्रत्येक के लिए एक परिभाषा है। अजगर में, शब्द को एक 'कुंजी' कहा जाता है, और परिभाषा एक 'मूल्य'। किसी शब्दकोश के मानों की संख्या नहीं है - वे किसी भी विशिष्ट क्रम में नहीं हैं, या तो - कुंजी एक ही काम करती है। आप शब्दकोशों में मूल्यों को जोड़ सकते हैं, हटा सकते हैं और संशोधित कर सकते हैं। उदाहरण: टेलीफोन बुक।
उनका उपयोग करते समय, मैं आपके संदर्भ के लिए उनके तरीकों की एक विस्तृत धोखा देती हूं:
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'}}
शब्दकोश: एक पायथन डिक्शनरी का उपयोग हैश तालिका की तरह किया जाता है, जिसका मूल्य सूचकांक और मूल्य के रूप में होता है।
सूची: एक सूची का उपयोग सरणी में उस वस्तु की स्थिति द्वारा अनुक्रमित सरणी में वस्तुओं को रखने के लिए किया जाता है।
सेट: एक सेट फ़ंक्शन के साथ एक संग्रह है जो यह बता सकता है कि कोई ऑब्जेक्ट सेट में मौजूद है या नहीं।