Computer >> Máy Tính >  >> Lập trình >> Python

Triển khai Mảng động trong Python

Mảng động

Trong python, danh sách, tập hợp và từ điển là các đối tượng có thể thay đổi. Trong khi number, string và tuple là các đối tượng bất biến. Các đối tượng có thể thay đổi có nghĩa là chúng tôi thêm / xóa các mục khỏi danh sách, tập hợp hoặc từ điển, tuy nhiên, điều đó không đúng trong trường hợp các đối tượng bất biến như tuple hoặc string.

Trong python, danh sách là một mảng động. Hãy thử tạo một danh sách động -

>>> #Create an empty list, named list1
>>> list1 = []
>>> type (list1)
<class 'list'>

Thêm một số mục vào danh sách trống của chúng tôi, list1 -

>>> # Add items
>>> list1 =[2, 4, 6]
>>> list1
[2, 4, 6]
>>> # Another way to add items, using append.
>>> list1.append('Tutorialspoint')
>>> list1
[2, 4, 6, 'Tutorialspoint']

Xóa một số mục khỏi danh sách -

>>> # deleting item from a list
>>> list1.pop()
'Tutorialspoint'
>>> list1
[2, 4, 6]

Từ phía trên, chúng ta có thể thấy danh sách đó thực sự là một phần mở rộng của một mảng, nơi chúng ta có thể sửa đổi (tăng hoặc giảm) kích thước của một danh sách. Chúng tôi bắt đầu với một danh sách có kích thước "không" và sau đó thêm "bốn" mục vào đó.

Kiến thức cơ bản về triển khai mảng động

Hãy xem xét một ví dụ trong đó danh sách .i.e. list1 được thêm vào khi kích thước của mảng đầy, chúng ta cần thực hiện các bước dưới đây để khắc phục thiếu sót về giới hạn kích thước của nó. Đây là cơ sở đằng sau việc triển khai mảng động -

  • Phân bổ một danh sách mảng 2 mới với dung lượng lớn hơn
  • Đặt list2 [i] =list1 [i], cho i =0,1… .n-1, trong đó n là số hiện tại của mục.
  • Đặt list1 =list2, vì hiện tại list2 đang tham chiếu đến danh sách mới của chúng tôi.
  • Và sau đó, chỉ cần chèn (nối) mục mới vào danh sách của chúng tôi (list1).

Hãy tạo một đoạn mã đơn giản về cách triển khai khái niệm mảng động trong lập trình python. Chúng tôi sẽ tạo lớp mảng động của riêng mình bằng cách sử dụng lớp thư viện tích hợp sẵn trong python có tên ctypes sẽ được sử dụng như một mảng thô từ mô-đun ctypes.

dynamicArray.py

import ctypes
class DynamicArray(object):
   #Initialize it
   def __init__(self):
      #We'll have three attributes
      self.n = 0 # by default
      self.capacity = 1 # by default
      self.A = self.make_array(self.capacity) # make_array will be defined later
   #Length method
   def __len__(self):
      #It will return number of elements in the array
      return self.n
   def __getitem__(self, k):
      #it will return the elements at the index k
   if not 0 <=k <self.n:
      return IndexError('k is out of bounds')
   return self.A[k]
   def append(self, element):
   #checking the capacity
   if self.n == self.capacity:
      #double the capacity for the new array i.e
      self.resize(2*self.capacity) # _resize is the method that is defined later
   # set the n indexes of array A to elements
   self.A[self.n] = element
   self.n += 1
   def _resize(self, new_cap): #new_cap is for new capacity
   #declare array B
   B = self.make_array(new_cap)
   for k in range(self.n):
      B[k] = self.A[k] # referencing the elements from array A to B
      #ones refered then
   self.A = B # A is now the array B
   self.capacity = new_cap # resets the capacity
   #making the make-array method using ctypes
   def make_array(self,new_cap):
      return (new_cap * ctypes.py_object)()
arr = DynamicArray()

Vì lớp động của chúng tôi đã sẵn sàng để sử dụng, hãy thử làm gì đó với nó -

>>> len(arr)
0
>>> arr.append(1)
>>> #First item entered
>>> len(arr)
1
>>> arr.append('Tutorialspoint')
>>> #second item entered
>>> len(arr)
2
>>> arr[1]
'Tutorialspoint'

Vậy là xong, chúng tôi đã tạo mảng động của riêng mình và chúng tôi có thể thay đổi kích thước mảng là một danh sách trong python.