पायथन में सूची समझ

List Comprehensions Python



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

पायथन में लूप के लिए

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







के लियेएक्समें श्रेणी(10):
प्रिंट(एक्स)

उपरोक्त लूप के लिए 0 से शुरू होकर 9 पर समाप्त होने वाले दस नंबर प्रिंट होंगे।



सूची समझ

सूची की समझ एक-लाइनर स्टेटमेंट में लूप के लिए मल्टी-लाइन लिखने के लिए एक शॉर्टहैंड/संक्षिप्त तरीका है। नीचे दी गई सूची समझ का उदाहरण इसमें x के सभी मानों को शामिल करके [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] के रूप में एक नई सूची बनाएगा।



नंबर= [एक्सके लियेएक्समें श्रेणी(10)]
प्रिंट (नंबर)

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





नंबर= []
के लियेएक्समें श्रेणी(10):
संख्याएं।संलग्न(एक्स)

प्रिंट (नंबर)

प्रदर्शन और पठनीयता

लूप की तुलना में सूची की समझ तेज होती है। हालाँकि, जब तक आप सैकड़ों-हजारों आइटमों को पुनरावृत्त नहीं कर रहे हैं, तब तक आपको प्रमुख प्रदर्शन सुधार दिखाई नहीं देंगे। जबकि सूची की समझ लूप के लिए लिखने का एक संक्षिप्त तरीका प्रदान करती है, जटिल अभिव्यक्ति कोड की खराब पठनीयता और बढ़ी हुई वाचालता का कारण बन सकती है। कोड को पठनीय रखना महत्वपूर्ण है, जब तक कि अधिकतम प्रदर्शन प्राप्त करना आपके कार्यक्रम के लिए एक परम आवश्यकता न हो।

उदाहरण: डिक्शनरी और सेट के साथ लिस्ट कॉम्प्रिहेंशन सिंटैक्स का उपयोग करना

एक पायथन डिक्शनरी कुंजी-मूल्य जोड़े में परिभाषित तत्वों का एक संग्रह है, जबकि एक सेट अद्वितीय मानों का संग्रह है जहां डुप्लिकेट की अनुमति नहीं है। सूची समझ का उपयोग पायथन शब्दकोशों और सेटों के साथ भी किया जा सकता है। वाक्य रचना थोड़ा अलग है, वर्ग ब्रेसिज़ में अभिव्यक्ति को लपेटने के बजाय, अब आपको घुंघराले ब्रेसिज़ का उपयोग करना होगा। नई सूची के बजाय आपको एक नया शब्दकोश/सेट ऑब्जेक्ट भी मिलेगा।



आंकड़े= {'शहर':'न्यूयॉर्क', 'नाम':'जॉन डो'}

स्वरूपित_डेटा= {के। वी।शीर्षक() के लियेप्रति,वीमेंआंकड़े।आइटम()}

प्रिंट (स्वरूपित_डेटा)

ऊपर दिया गया उदाहरण स्ट्रिंग मानों को शीर्षक केस में बदल देगा और स्वरूपित_डेटा नामक एक नया शब्दकोश बनाएगा, जिसका आउटपुट होगा: {'शहर': 'न्यूयॉर्क', 'नाम': 'जॉन डो'}। आप बाईं ओर मौजूदा शब्दकोश चर निर्दिष्ट करके शब्दकोश/सेट-इन-प्लेस भी बदल सकते हैं।

आंकड़े= {'शहर':'न्यूयॉर्क', 'नाम':'जॉन डो'}

आंकड़े= {के। वी।शीर्षक() के लियेप्रति,वीमेंआंकड़े।आइटम()}

प्रिंट (आंकड़े)

शब्दकोश समझ का उपयोग किए बिना, कोड इस तरह दिखेगा:

आंकड़े= {'शहर':'न्यूयॉर्क', 'नाम':'जॉन डो'}

स्वरूपित_डेटा= {}

के लियेप्रति,वीमेंआंकड़े।आइटम():
स्वरूपित_डेटा[प्रति] =वीशीर्षक()

प्रिंट (स्वरूपित_डेटा)

चूंकि सेट में कोई कुंजी-मूल्य जोड़े नहीं होते हैं, एक सेट समझ को उसी तरह परिभाषित किया जा सकता है जैसे सूची समझ। केवल अंतर घुंघराले ब्रेसिज़ के उपयोग का है।

उदाहरण: मल्टीपल फॉर लूप्स इन ए लिस्ट कॉम्प्रिहेंशन

ऊपर उल्लिखित सूची समझ उदाहरण बुनियादी है और कथन के लिए एकल का उपयोग करता है। नीचे एक उदाहरण है जो लूप के लिए एकाधिक का उपयोग करता है और एक सशर्त if कथन का उपयोग करता है।

विशेषण= ['डिस्क', 'ईओन', 'फोकल', 'आर्टफुल']

जानवरों= ['डिंगो', 'एर्मिन', 'गड्डा', 'बीवर']

कोडनेम= [एक्स +''+ औरके लियेएक्समेंविशेषणके लियेतथामेंजानवरोंअगरतथा।इसके साथ आरंभ होता है(एक्स[0])]

प्रिंट (कोडनेम)

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

विशेषण= ['डिस्क', 'ईओन', 'फोकल', 'आर्टफुल']
जानवरों= ['डिंगो', 'एर्मिन', 'गड्डा', 'बीवर']

कोडनेम= []

के लियेएक्समेंविशेषण:
के लियेतथामेंजानवरों:
अगरतथा।इसके साथ आरंभ होता है(एक्स[0]):
कोडनेम।संलग्न(एक्स +''+ और)

प्रिंट (कोडनेम)

उदाहरण: सूची बोध और if-else खंड

नीचे दिया गया उदाहरण सूची समझ में अगर और अन्य कथनों का उपयोग दिखाएगा।

संख्या_सूची= [1, 2, 3, 4]
अन्य_सूची= [5, 6, 7, 8]

नतीजा= [सत्य अगर (एक्स + वाई)%2 == 0 अन्यथा झूठा के लियेएक्समेंसंख्या_सूचीके लियेतथामेंअन्य_सूची]

प्रिंट (नतीजा)

दो सूचियों के माध्यम से लूप करते समय, उपरोक्त सूची समझ जांचती है कि तत्वों की जोड़ी का योग भी है या नहीं। ऊपर दिए गए कोड को चलाने से आपको आउटपुट के रूप में [सत्य, असत्य, सत्य, असत्य, असत्य, सत्य, असत्य, सत्य, सत्य, असत्य, सत्य, असत्य, असत्य, सत्य, असत्य, सत्य] दिखाई देगा। सूची समझ का उपयोग किए बिना, कोड इस तरह दिखेगा:

संख्या_सूची= [1, 2, 3, 4]
अन्य_सूची= [5, 6, 7, 8]
नतीजा= []

के लियेएक्समेंसंख्या_सूची:
के लियेतथामेंअन्य_सूची:
अगर (एक्स + वाई)%2 == 0:
नतीजा।संलग्न(सत्य)
अन्यथा:
नतीजा।संलग्न(झूठा)

प्रिंट (नतीजा)

निष्कर्ष

सूची की समझ स्वच्छ और संक्षिप्त लूप स्टेटमेंट लिखने का एक अच्छा तरीका प्रदान करती है। हालांकि, अगर कई लूप और सशर्त बयानों का उपयोग किया जाता है, तो वे जल्दी से जटिल और समझने में मुश्किल हो सकते हैं। अंत में, यह एक प्रोग्रामर के आराम के स्तर पर आता है लेकिन आम तौर पर शॉर्टहैंड का अत्यधिक उपयोग करने के बजाय स्पष्ट, पठनीय और आसान डिबग कोड लिखना एक अच्छा विचार है।