python पायथन में सूची में तत्वों की संख्या कैसे प्राप्त करें?




list (5)

len() फ़ंक्शन का उपयोग Python में कई प्रकार के साथ किया जा सकता है - अंतर्निहित प्रकार और लाइब्रेरी प्रकार दोनों।

>>> len([1,2,3])
3
items = []
items.append("apple")
items.append("orange")
items.append("banana")

# FAKE METHOD::
items.amount()  # Should return 3

मैं सूची में तत्वों की संख्या कैसे प्राप्त करूं?


सूची का आकार कैसे प्राप्त करें?

सूची का आकार ढूंढने के लिए, बिल्टिन फ़ंक्शन का उपयोग करें, len :

items = []
items.append("apple")
items.append("orange")
items.append("banana")

और अब:

len(items)

रिटर्न 3।

docs

len(s)

ऑब्जेक्ट की लंबाई (वस्तुओं की संख्या) लौटें। तर्क एक अनुक्रम (जैसे एक स्ट्रिंग, बाइट्स, टुपल, सूची, या रेंज) या एक संग्रह (जैसे एक शब्दकोश, सेट, या जमे हुए सेट) हो सकता है।

len मॉडल डेटा docs से __len__ साथ लागू किया गया है:

object.__len__(self)

बिल्ट-इन फ़ंक्शन len() को लागू करने के लिए बुलाया गया। ऑब्जेक्ट की लंबाई, एक पूर्णांक> = 0. लौटा देना चाहिए। साथ ही, एक ऑब्जेक्ट जो एक __nonzero__() [पायथन 3 या __bool__() में पाइथन 3] विधि को परिभाषित नहीं करता है और जिसका __len__() विधि शून्य देता है एक बूलियन संदर्भ में झूठी होने के लिए।

और हम यह भी देख सकते हैं कि __len__ सूचियों का एक तरीका है:

items.__len__()

रिटर्न 3।

बिल्टिन प्रकार आप len (लंबाई) प्राप्त कर सकते हैं

और वास्तव में हम देखते हैं कि हम इस जानकारी को सभी वर्णित प्रकारों के लिए प्राप्त कर सकते हैं:

>>> all(hasattr(cls, '__len__') for cls in (str, bytes, tuple, list, 
                                            xrange, dict, set, frozenset))
True

एक शर्त के लिए मान के रूप में len उपयोग न करें

मत करो:

if len(items): 
    ...

इसके बजाए, करें:

if items:
    ...

मैं समझाता हूं कि यहां क्यों लेकिन संक्षेप में, यह अधिक पठनीय और अधिक प्रदर्शनकारी है।


हालांकि यह इस तथ्य के कारण उपयोगी नहीं हो सकता है कि यह "बॉक्स से बाहर" कार्यक्षमता के रूप में बहुत अधिक समझ में आता है, एक length संपत्ति के साथ कक्षा बनाने के लिए एक साधारण सरल हैक होगा:

class slist(list):
    @property
    def length(self):
        return len(self)

आप इसका उपयोग इस प्रकार कर सकते हैं:

>>> l = slist(range(10))
>>> l.length
10
>>> print l
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

अनिवार्य रूप से, यह एक ओओपी-अनुकूल length संपत्ति रखने के अतिरिक्त लाभ के साथ, एक सूची वस्तु के समान है।

हमेशा की तरह, आपके माईलेज़ भिन्न हो सकते हैं।


और पूर्णता के लिए, यह len() फ़ंक्शन का उपयोग किए बिना संभव है (मैं इसे एक अच्छा विकल्प के रूप में नहीं मानूंगा):

def count(list):
  item_count = 0
  for item in list[:]:
    item_count = item_count + 1
  return item_count

count([1,2,3,4,5])

( list[:] में कोलन list[:] निहित है, इसलिए वैकल्पिक भी)


docs अलावा आप operator.length_hint उपयोग भी कर सकते हैं। Length_hint (पाइथन 3.4+ की आवश्यकता है)। सामान्य list दोनों बराबर हैं लेकिन length_hint एक सूची-इटरेटर की लंबाई प्राप्त करना संभव बनाता है, जो कुछ परिस्थितियों में उपयोगी हो सकता है:

>>> from operator import length_hint
>>> l = ["apple", "orange", "banana"]
>>> len(l)
3
>>> length_hint(l)
3

>>> list_iterator = iter(l)
>>> len(list_iterator)
TypeError: object of type 'list_iterator' has no len()
>>> length_hint(list_iterator)
3

लेकिन length_hint परिभाषा केवल एक "संकेत" है, इसलिए ज्यादातर समय len बेहतर होता है।

मैंने __len__ तक पहुंचने का सुझाव देने वाले कई उत्तरों को देखा है। list में निर्मित कक्षाओं से निपटने पर यह ठीक है लेकिन इससे कस्टम कक्षाओं में समस्याएं पैदा हो सकती हैं क्योंकि len (और length_hint ) कुछ सुरक्षा जांच लागू करती है। उदाहरण के लिए दोनों एक निश्चित मान ( sys.maxsize मान) से अधिक नकारात्मक लंबाई या लंबाई की अनुमति नहीं देते हैं। इसलिए __len__ विधि के बजाय len फ़ंक्शन का उपयोग करना हमेशा सुरक्षित __len__ है!







list