Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

การนำ Dynamic Array ไปใช้งานใน Python


ไดนามิกอาเรย์

ใน python รายการ ชุด และพจนานุกรมเป็นอ็อบเจ็กต์ที่ไม่แน่นอน ในขณะที่ number, string และ tuple เป็นอ็อบเจกต์ที่ไม่เปลี่ยนรูป ออบเจ็กต์ที่ไม่แน่นอนหมายความว่าเราเพิ่ม/ลบรายการจากรายการ ชุด หรือพจนานุกรม ซึ่งไม่เป็นความจริงในกรณีที่อ็อบเจ็กต์ที่ไม่เปลี่ยนรูป เช่น ทูเพิลหรือสตริง

ใน python รายการคือไดนามิกอาร์เรย์ มาลองสร้างรายการไดนามิกกันเถอะ -

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

เพิ่มบางรายการลงในรายการว่างของเรา 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']

ลบบางรายการออกจากรายการ -

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

จากด้านบน เราจะเห็นว่ารายการนั้นเป็นส่วนขยายของอาร์เรย์จริงๆ ซึ่งเราสามารถแก้ไข (เพิ่มหรือลด) ขนาดรายการได้ เราเริ่มต้นด้วยรายการขนาด "ศูนย์" แล้วเพิ่ม "สี่" รายการลงไป

พื้นฐานของการนำอาร์เรย์ไดนามิกไปใช้

ลองพิจารณาตัวอย่างที่มีรายการ .i.e. list1 จะถูกต่อท้ายเมื่อขนาดของอาร์เรย์เต็มแล้ว เราจำเป็นต้องดำเนินการตามขั้นตอนด้านล่างเพื่อเอาชนะข้อบกพร่องข้อจำกัดด้านขนาด นี่คือพื้นฐานเบื้องหลังการนำอาร์เรย์ไดนามิกไปใช้ -

  • จัดสรรอาร์เรย์ list2 ใหม่ที่มีความจุมากขึ้น
  • ตั้งค่า list2[i] =list1[i] สำหรับ i =0,1….n-1 โดยที่ n คือหมายเลขปัจจุบันของรายการ
  • ตั้งค่า list1=list2 เนื่องจากตอนนี้ list2 กำลังอ้างอิงรายการใหม่ของเรา
  • จากนั้น เพียงแค่แทรก (ผนวก) รายการใหม่ในรายการของเรา (list1)

มาสร้างโค้ดง่ายๆ เกี่ยวกับวิธีใช้แนวคิดไดนามิกอาร์เรย์ในการเขียนโปรแกรมหลาม เราจะสร้างคลาสอาร์เรย์ไดนามิกของเราเองโดยใช้คลาสไลบรารีในตัวใน python ที่เรียกว่า ctypes ซึ่งจะใช้เป็นอาร์เรย์ดิบจากโมดูล 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()

ในขณะที่คลาสไดนามิกของเราพร้อมใช้งานแล้ว ให้ลองทำอะไรบางอย่างกับมัน -

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

เพียงเท่านี้ เราได้สร้างอาร์เรย์ไดนามิกของเราเอง และเราสามารถปรับขนาดอาร์เรย์ที่เป็นรายการในไพ ธ อนได้