जवाबों:
my_list = [1,2,3,4,5]
len(my_list)
# 5
टुपल्स के लिए समान कार्य:
my_tuple = (1,2,3,4,5)
len(my_tuple)
# 5
और तार, जो वास्तव में पात्रों के केवल सरणियाँ हैं:
my_string = 'hello world'
len(my_string)
# 11
यह जानबूझकर इस तरह से किया गया था ताकि सूचियां, टपल्स और अन्य कंटेनर प्रकार या पुनरावृत्तियां सभी को स्पष्ट रूप से एक सार्वजनिक .length()
विधि को लागू करने की आवश्यकता नहीं थी , इसके बजाय आप बस len()
'जादू' __len__()
पद्धति को लागू करने वाली किसी भी चीज़ की जांच कर सकते हैं ।
यकीन है, यह बेमानी लग सकता है, लेकिन लंबाई की जाँच कार्यान्वयन में काफी भिन्नता हो सकती है, यहां तक कि एक ही भाषा के भीतर भी। यह देखने के लिए असामान्य नहीं है कि एक संग्रह प्रकार एक .length()
विधि का उपयोग करता है जबकि दूसरा प्रकार किसी .length
संपत्ति का उपयोग करता है , जबकि दूसरा उपयोग करता है .count()
। भाषा-स्तर का कीवर्ड होना इन सभी प्रकारों के लिए प्रवेश बिंदु को एकीकृत करता है। यहां तक कि जिन वस्तुओं को आप तत्वों की सूची नहीं मान सकते हैं, वे अभी भी लंबाई-जांच की जा सकती हैं। इसमें तार, कतार, पेड़ आदि शामिल हैं।
कार्यात्मक प्रकृति len()
भी प्रोग्रामिंग की कार्यात्मक शैलियों के लिए अच्छी तरह से उधार देती है।
lengths = map(len, list_of_containers)
जिस तरह से आप किसी भी चीज़ की लंबाई लेते हैं, जो समझ में आता है (एक सूची, शब्दकोश, टपल, स्ट्रिंग, ...) उस पर कॉल len
करना है।
l = [1,2,3,4]
s = 'abcde'
len(l) #returns 4
len(s) #returns 5
"अजीब" वाक्यविन्यास का कारण यह है कि आंतरिक रूप से अजगर में अनुवाद len(object)
होता है object.__len__()
। यह किसी भी वस्तु पर लागू होता है। इसलिए, यदि आप कुछ वर्ग को परिभाषित कर रहे हैं और यह समझ में आता है कि इसकी लंबाई है, तो बस इस __len__()
पर एक विधि निर्धारित करें और फिर len
उन उदाहरणों पर कॉल कर सकते हैं ।
पायथन डक टाइपिंग का उपयोग करता है : यह इस बात की परवाह नहीं करता है कि कोई वस्तु क्या है , जब तक कि उसके पास हाथ में स्थिति के लिए उपयुक्त इंटरफ़ेस है। जब आप किसी ऑब्जेक्ट पर बिल्ट-इन फ़ंक्शन लेन () कहते हैं, तो आप वास्तव में इसकी आंतरिक __len__ विधि कह रहे हैं। एक कस्टम ऑब्जेक्ट इस इंटरफ़ेस को लागू कर सकता है और लेन () उत्तर को वापस कर देगा, भले ही ऑब्जेक्ट वैचारिक रूप से एक अनुक्रम न हो।
इंटरफेस की पूरी सूची के लिए, यहां देखें: http://docs.python.org/reference/datamodel.html#basic-customization
किसी भी अजगर वस्तु की लंबाई प्राप्त करने का पसंदीदा तरीका इसे len
फ़ंक्शन के तर्क के रूप में पारित करना है । आंतरिक रूप से, अजगर तब उस विशेष __len__
विधि को कॉल करने का प्रयास करेगा जो पारित किया गया था।
आप len(arr)
सरणी की लंबाई प्राप्त करने के लिए पिछले उत्तरों में सुझाए अनुसार उपयोग कर सकते हैं । यदि आप एक 2 डी सरणी के आयाम चाहते हैं तो आप arr.shape
रिटर्न ऊंचाई और चौड़ाई का उपयोग कर सकते हैं
len(list_name)
फ़ंक्शन एक पैरामीटर के रूप में सूची लेता है और यह सूची के __len__()
फ़ंक्शन को कॉल करता है।
पायथन का सुझाव है कि उपयोगकर्ताओं को निरंतरता के len()
बजाय उपयोग करना चाहिए __len__()
, जैसे अन्य लोगों ने कहा। हालांकि, कुछ अन्य लाभ हैं:
कुछ बिल्ट-इन के लिए की तरह प्रकार list
, str
, bytearray
और इतने पर, की Cython कार्यान्वयन len()
के लिए एक शॉर्टकट लेता है। यह सीधे ob_size
सी संरचना में रिटर्न करता है, जो कॉलिंग से तेज है __len__()
।
यदि आप इस तरह के विवरणों में रुचि रखते हैं, तो आप लुसियानो रामलहो द्वारा "फ्लुएंट पायथन" नामक पुस्तक पढ़ सकते हैं। इसमें कई दिलचस्प विवरण हैं, और आपको अजगर को अधिक गहराई से समझने में मदद मिल सकती है।