पायथन एक सूची को दूसरे से प्राप्त करने के लिए कॉम्पैक्ट सिंटैक्स प्रदान करता है। इन अभिव्यक्तियों को सूची समझ कहा जाता है। सूची की समझ पायथन में सबसे शक्तिशाली उपकरणों में से एक है। पायथन की सूची समझ कार्यात्मक प्रोग्रामिंग अवधारणाओं के लिए भाषा के समर्थन का एक उदाहरण है।
पायथन सूची की समझ किसी फ़ंक्शन या फ़िल्टर को आइटम की सूची में लागू करने का एक बहुत ही आसान तरीका है। यदि आप सावधान नहीं हैं तो सूची की समझ बहुत उपयोगी हो सकती है, लेकिन अगर आप सावधान नहीं हैं तो बहुत अपठनीय हैं।
सिंटैक्स
सूची समझ का सामान्य सिंटैक्स है -
[expr for element in iterable if condition]
ऊपर −
. के बराबर हैfor element in iterable: if condition: expr
उदाहरण के लिए, मान लें कि आप किसी सूची में प्रत्येक संख्या के वर्ग की गणना करना चाहते हैं। आप अपनी गणना के लिए व्यंजक और लूप ओवर करने के लिए इनपुट अनुक्रम प्रदान करके ऐसा कर सकते हैं।
>>> lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>> squares = [x**2 for x in lst] >>> print(squares) [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
सूची समझ बनाम लूप के लिए
#USING FOR LOOP evens = [] for i in range(10): if i % 2 == 0: evens. append(i) print(evens)
आउटपुट
[0, 2, 4, 6, 8]
उपरोक्त कोड को लिखने का एक बेहतर और तेज़ तरीका सूची समझ के माध्यम से है।
>>> [i for i in range(10) if i % 2 ==0] [0, 2, 4, 6, 8]
जैसा कि हम देख सकते हैं, सूची समझ का उपयोग करके कोड लिखना बहुत अधिक कुशल है, यह छोटा है और इसमें कम तत्व शामिल हैं।
सूची समझ बनाम लैम्ब्डा फ़ंक्शन
जब तक आप एकल-तर्क फ़ंक्शन लागू नहीं कर रहे हैं, सूची की समझ साधारण मामलों के लिए अंतर्निहित मानचित्र फ़ंक्शन की तुलना में स्पष्ट है। मानचित्र को गणना के लिए एक लैम्ब्डा फ़ंक्शन बनाने की आवश्यकता होती है, जो नेत्रहीन शोर है।
>>> lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>> list(map(lambda x: x**2, lst)) [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
मानचित्र के विपरीत, सूची की समझ आपको परिणाम से संबंधित आउटपुट को हटाते हुए, इनपुट सूची से आइटम को आसानी से फ़िल्टर करने देती है।
सशर्त अभिव्यक्ति के साथ समझ की सूची बनाएं
उदाहरण के लिए, मान लें कि आप केवल 100 से कम संख्याओं की गणना करना चाहते हैं, जो 2 और 5 दोनों से विभाज्य हैं।
>>> lst = [x for x in range(100) if x % 2 == 0 if x % 5 == 0] >>> print(lst) [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
एक और उदाहरण लें, जहां आप केवल उन संख्याओं के वर्गों की गणना करना चाहते हैं जो 2 से विभाज्य हैं। यहां, मैं लूप के बाद सूची समझ में एक सशर्त अभिव्यक्ति जोड़कर ऐसा करता हूं -
>>> lst=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>> even_squares = [x**2 for x in lst if x % 2 == 0] >>> print(even_squares) [4, 16, 36, 64, 100]
1 से 100 के बीच सम संख्याओं की गणना करें।
>>> # a list of even numbers between 1 and 100 evens = [i for i in range(1,100) if not i % 2] >>> print(evens) [2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98]
बड़ी संख्या में वस्तुओं पर लूप करते समय सूची की समझ लूप की तुलना में कहीं अधिक तेज़ होती है। यदि केवल पठनीयता ही उनका यथासंभव उपयोग करने का एक ठोस कारण नहीं है, तो गति होनी चाहिए।