Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Python

Python में डायनामिक एरे का कार्यान्वयन


डायनामिक एरे

Python में, एक सूची, सेट और डिक्शनरी म्यूटेबल ऑब्जेक्ट हैं। जबकि संख्या, स्ट्रिंग, और टपल इम्यूटेबल ऑब्जेक्ट हैं। म्यूटेबल ऑब्जेक्ट का मतलब है कि हम सूची, सेट या डिक्शनरी से आइटम जोड़/हटा सकते हैं, हालांकि, यह इम्यूटेबल ऑब्जेक्ट जैसे टपल या स्ट्रिंग के मामले में सच नहीं है।

Python में, एक सूची एक डायनामिक एरे है। आइए एक डायनामिक सूची बनाने का प्रयास करें -

>>> # एक खाली सूची बनाएं, नाम list1
>>> list1 = []
>>> type(list1)

हमारी खाली सूची, list1 पर कुछ आइटम जोड़ें -

>>> # आइटम जोड़ें
>>> list1 = [2, 4, 6]
>>> list1
[2, 4, 6]
>>> # आइटम जोड़ने का दूसरा तरीका, append का उपयोग करके।
>>> list1.append('Tutorialspoint')
>>> list1
[2, 4, 6, 'Tutorialspoint']

सूची से कुछ आइटम हटाएं -

>>> # सूची से आइटम हटाना
>>> list1.pop()
'Tutorialspoint'
>>> list1
[2, 4, 6]

उपरोक्त से हम देख सकते हैं कि सूची वास्तव में एक एरे का विस्तार है, जहां हम सूची का आकार संशोधित कर सकते (बढ़ा या घटा सकते हैं)। हमने आकार "शून्य" की सूची से शुरू किया और फिर इसमें "चार" आइटम जोड़े।

डायनामिक एरे कार्यान्वयन की मूल बातें

एक उदाहरण पर विचार करें जहां सूची यानी list1 को तब जोड़ा जाता है जब एरे का आकार भरा होता है, फिर हमें इसकी आकार सीमा की कमी को दूर करने के लिए नीचे दिए गए चरणों को करने की आवश्यकता होती है। यह डायनामिक एरे कार्यान्वयन का आधार है -

  • एक नई एरे list2 को बड़ी क्षमता के साथ आवंटित करें
  • list2[i] = list1[i] सेट करें, i = 0,1...n-1 के लिए, जहां n वर्तमान आइटम की संख्या है।
  • list1 = list2 सेट करें, क्योंकि अब list2 हमारी नई सूची को संदर्भित कर रहा है।
  • और फिर, बस नया आइटम हमारी सूची (list1) में डालें (जोड़ें)।

आइए Python प्रोग्रामिंग में डायनामिक एरे अवधारणा को कैसे लागू करें, इस पर एक सरल कोड बनाएं। हम Python में बिल्ट-इन लाइब्रेरी क्लास ctypes का उपयोग करके अपनी खुद की डायनामिक एरे क्लास बनाएंगे जिसका उपयोग ctypes मॉड्यूल से रॉ एरे के रूप में किया जाएगा।

dynamicArray.py

import ctypes

class DynamicArray(object):
    # इनिशियलाइज़ करें
    def __init__(self):
        # हमारे पास तीन विशेषताएं होंगी
        self.n = 0 # डिफ़ॉल्ट रूप से
        self.capacity = 1 # डिफ़ॉल्ट रूप से
        self.A = self.make_array(self.capacity) # make_array को बाद में परिभाषित किया जाएगा
    
    # लंबाई मेथड
    def __len__(self):
        # यह एरे में तत्वों की संख्या लौटाएगा
        return self.n
    
    def __getitem__(self, k):
        # यह इंडेक्स k पर तत्व लौटाएगा
        if not 0 <= k < self.n:
            return IndexError('k is out of bounds')
        return self.A[k]
    
    def append(self, element):
        # क्षमता की जांच
        if self.n == self.capacity:
            # नई एरे के लिए क्षमता दोगुनी करें यानी
            self._resize(2 * self.capacity) # _resize वह मेथड है जिसे बाद में परिभाषित किया गया है
        
        # एरे A के n इंडेक्स को तत्व पर सेट करें
        self.A[self.n] = element
        self.n += 1
    
    def _resize(self, new_cap): # new_cap नई क्षमता के लिए है
        # एरे B घोषित करें
        B = self.make_array(new_cap)
        for k in range(self.n):
            B[k] = self.A[k] # एरे A से B में तत्वों को संदर्भित करना
            # एक बार संदर्भित होने के बाद
        self.A = B # A अब एरे B है
        self.capacity = new_cap # क्षमता रीसेट करता है
    
    # ctypes का उपयोग करके make-array मेथड बनाना
    def make_array(self, new_cap):
        return (new_cap * ctypes.py_object)()

arr = DynamicArray()

जैसा कि हमारी डायनामिक क्लास उपयोग के लिए तैयार है, आइए इसके साथ कुछ आज़माएं -

>>> len(arr)
0
>>> arr.append(1)
>>> # पहला आइटम दर्ज किया गया
>>> len(arr)
1
>>> arr.append('Tutorialspoint')
>>> # दूसरा आइटम दर्ज किया गया
>>> len(arr)
2
>>> arr[1]
'Tutorialspoint'

बस इतना ही, हमने अपना खुद का डायनामिक एरे बना लिया है और हम एरे का आकार बदल सकते हैं जो Python में एक सूची है।


  1. पायथन का आंतरिक कार्यान्वयन पायथन का आंतरिक कार्यान्वयन

    इस लेख में, हम पायथन के आंतरिक कार्यान्वयन और पायथन इंटरप्रेटर द्वारा विभिन्न ऑब्जेक्ट्स को मेमोरी में स्पेस आवंटित करने के तरीके के बारे में जानेंगे।पायथन जावा की तरह एक ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग कंस्ट्रक्ट लैंग्वेज है। पायथन एक इंटरप्रेटर का उपयोग करता है और इसलिए इसे इंटरप्रेटेड लैंग्वेज कहा

  1. पायथन में इनहेरिटेंस (Inheritance) पायथन में इनहेरिटेंस (Inheritance)

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

  1. - पायथन में कॉन्क्रीट एक्सेप्शन्स

    पायथन में कुछ सामान्य अपवाद होते हैं जो विभिन्न प्रोग्राम्स में उठाए जाते हैं। ये प्रोग्रामर द्वारा स्पष्ट रूप से या पायथन इंटरप्रेटर द्वारा निहित रूप से उठाए जा सकते हैं। कुछ प्रमुख अपवाद निम्नलिखित हैं:AssertionError अपवादजब कोई assert स्टेटमेंट फेल होता है तो AssertionError उठता है। पायथन में हम