दिलचस्प पोस्ट
जावास्क्रिप्ट में अनिर्धारित या शून्य चर की जांच कैसे करें? शा और बाश के बीच अंतर कैसे एसेट फ़ोल्डर पर एक फ़ाइल के लिए एंड्रॉइड पथ स्ट्रिंग प्राप्त करने के लिए? एक HTML / PHP फ़ाइल में छवियों को कैसे एम्बेड करें? $ .getJSON फ़ंक्शन के दौरान सेट किए गए चर केवल फ़ंक्शन के भीतर पहुंच योग्य हैं पीएचपी: आईपैड पीपीए द्वारा मुहैया MP4 वीडियो नहीं खेलता है, लेकिन अगर इसे सीधे एक्सेस किया जाता है तो कैसे DOM तत्व वर्ग से उत्तराधिकार के लिए iTextSharp- जेनरेट किए गए पीडीएफ अब एडोब रीडर एक्स में संवाद सहेजें जावा में Log4J आउटपुट अक्षम करना jqGrid "th" और "thead" मिलकर jQuery का उपयोग कर रहा है IntelliJ IDEA में पैरामीटर संकेत को अक्षम कैसे करें? एक्शनबेरशेललॉक का उपयोग करके नई सहायतामैपफ्रैग्मेंट चाप (एक वृत्त के) के लिए एसवीजी पथ की गणना कैसे करें यूनिकोड वर्णों की तुलना कैसे करें, जो "एक जैसा दिखते हैं"? 2 फ़ंक्शन एक ही समय में चलाएं

अजगर: सूची बनाम ट्यूपल, प्रत्येक का उपयोग करने के लिए कब?

अजगर में, जब आप सूचियों और ट्यूपल्स का उपयोग करना चाहिए?

कभी-कभी आपके पास कोई विकल्प नहीं है, उदाहरण के लिए यदि आपके पास है

"hello %s you are %s years old" % x 

तो एक्स एक ट्यूपल होना चाहिए

लेकिन अगर मैं एक है जो एपीआई डिजाइन करता है और डेटा प्रकार चुनने के लिए जाता है, तो दिशानिर्देश क्या हैं?

Solutions Collecting From Web of "अजगर: सूची बनाम ट्यूपल, प्रत्येक का उपयोग करने के लिए कब?"

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

प्रकृति में ट्यूप्ले आकार निश्चित हैं जबकि सूचियां गतिशील हैं।
दूसरे शब्दों में, एक tuple अपरिवर्तनीय है जबकि एक list में परिवर्तन योग्य है

  1. आप तत्वों को ट्यूपल में नहीं जोड़ सकते ट्यूपल्स के पास कोई जोड़ना या विधि का विस्तार नहीं है
  2. आप ट्यूपल से तत्वों को नहीं निकाल सकते ट्यूपल्स में कोई निकासी या पॉप विधि नहीं है
  3. आप ट्यूपल में तत्व पा सकते हैं, क्योंकि यह ट्यूपल को नहीं बदलता है।
  4. आप यह जांचने के लिए ऑपरेटर in भी उपयोग कर सकते हैं कि क्या एक ट्यूपल में एक तत्व मौजूद है या नहीं।

  • ट्यूपल्स सूचियों की तुलना में तेज़ हैं यदि आप मूल्यों के एक निरंतर सेट को परिभाषित कर रहे हैं और जो भी आप कभी भी इसके साथ करने जा रहे हैं, इसके माध्यम से पुनरावृत्त है, सूची के बजाय एक ट्यूपल का उपयोग करें

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

  • कुछ ट्यूपल्स को डिक्शनरी कुंजी के रूप में इस्तेमाल किया जा सकता है (विशेष रूप से, ट्यूपल्स जिसमें स्ट्रिंग्स, नंबर और अन्य ट्यूप्ले जैसे अचल मूल्य शामिल हैं)। सूचियों को कभी भी शब्द कुंजी के रूप में इस्तेमाल नहीं किया जा सकता, क्योंकि लिस्ट अपरिवर्तनीय नहीं हैं

स्रोत: पायथन 3 में कूदो

मेरा मानना ​​है कि (और मैं शायद ही पायथन में अच्छी तरह से वाकिफ हूं) कि मुख्य अंतर यह है कि एक टपल अपरिवर्तनीय है (इसे असाइनमेंट के बाद जगह में बदला नहीं जा सकता है) और एक सूची अस्थिर है (आप जोड़ सकते हैं, बदल सकते हैं, घटाना, आदि) )।

इसलिए, मैं अपनी ट्यूपल्स चीजों को बनाने में कामयाब होनी चाहिए, जिन्हें काम के बाद बदलना नहीं चाहिए और मेरी सूचियां, जो कर सकते हैं

क्या यह अस्थिर होना चाहिए? एक सूची का उपयोग करें क्या यह अस्थिर नहीं होना चाहिए? एक ट्यूपल का उपयोग करें

अन्यथा, यह चुनाव का सवाल है

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

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

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

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

 pages = {'foyer': {'text' : "some text", 'choices' : [('open the door', 'rainbow'), ('go left into the kitchen', 'bottomless pit'), ('stay put','foyer2')]},} 

ट्यूपल में पहला स्थान उपयोगकर्ता के लिए प्रदर्शित होता है जब वह गेम खेलते हैं और दूसरी स्थिति वह पेज की चाबी होती है जिसे पसंद होता है और यह सभी पृष्ठों के लिए संगत है।

ट्यूप्ले सूचियों की तुलना में अधिक मेमोरी कुशल हैं, हालांकि मुझे यकीन नहीं है कि जब यह लाभ स्पष्ट हो जाता है

थिंक पायथन में लिस्ट और ट्यूपल्स के अध्याय भी देखें

लेकिन अगर मैं एक है जो एपीआई डिजाइन करता है और डेटा प्रकार चुनने के लिए जाता है, तो दिशानिर्देश क्या हैं?

इनपुट पैरामीटर के लिए सबसे सामान्य इंटरफ़ेस को स्वीकार करना सबसे अच्छा है, जो आपके लिए आवश्यक है। यह शायद ही कभी एक ट्यूपल या सूची होती है – अधिकतर यह अनुक्रम, स्लाइस करने योग्य या यहां तक ​​कि टिकाऊ भी होता है पायथन की बतख टाइपिंग आमतौर पर इसे मुफ्त में प्राप्त होती है, जब तक कि आप स्पष्ट रूप से इनपुट प्रकार की जांच न करें। ऐसा न करें जब तक कि पूरी तरह से अपरिहार्य नहीं हो

आपके द्वारा उत्पादित किए गए डेटा (आउटपुट पैरामीटर) के लिए, बस आपके लिए क्या सबसे सुविधाजनक है, वापस लौटाएं, जैसे कि आप जो डेटैट टाइप करें या जो कुछ भी आपकी सहायक फ़ंक्शन रिटर्न देता है

एक बात ध्यान में रखना है कि एक सूची (या कोई अन्य अयोग्य) वापस करने से बचें जो आपके राज्य का हिस्सा है, जैसे

 class ThingsKeeper def __init__(self): self.__things = [] def things(self): return self.__things #outside objects can now modify your state def safer(self): return self.__things[:] #it's copy-on-write, shouldn't hurt performance 

ट्यूपल पर एक सूची का एक मामूली लेकिन उल्लेखनीय लाभ यह है कि सूचियों को थोड़ा अधिक पोर्टेबल होना चाहिए। मानक उपकरण ट्यूपल्स का समर्थन करने की संभावना कम है। उदाहरण के लिए, JSON में एक ट्यूपल प्रकार नहीं है। YAML करता है, लेकिन इसकी सिंटैक्स बदसूरत अपनी सूची सिंटेक्स की तुलना में है, जो काफी अच्छा है।

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