Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでの動的配列の実装


動的配列

Pythonでは、リスト、セット、ディクショナリは可変オブジェクトです。一方、数値、文字列、およびタプルは不変のオブジェクトです。可変オブジェクトとは、リスト、セット、または辞書からアイテムを追加/削除することを意味しますが、タプルや文字列などの不変オブジェクトの場合は当てはまりません。

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]

上記から、リストは実際には配列の拡張であり、リストのサイズを変更(増加または減少)できることがわかります。サイズが「ゼロ」のリストから始めて、次に「4」のアイテムを追加しました。

動的配列の実装の基本

リストが.i.e。である例を考えてみましょう。配列のサイズがいっぱいになるとlist1が追加されます。サイズ制限の欠点を克服するには、以下の手順を実行する必要があります。これが動的配列の実装の背後にある基礎です-

  • より大きな容量の新しいアレイリスト2を割り当てます
  • list2 [i] =list1 [i]を設定し、i =0,1….n-1の場合、nはアイテムの現在の番号です。
  • list1 =list2を設定します。これで、list2は新しいリストを参照しています。
  • 次に、新しいアイテムをリスト(list1)に挿入(追加)するだけです。

Pythonプログラミングで動的配列の概念を実装する方法に関する簡単なコードを作成しましょう。 ctypesモジュールから生の配列として使用されるctypesと呼ばれるPythonの組み込みライブラリクラスを使用して、独自の動的配列クラスを作成します。

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'

これで、独自の動的配列を作成し、Pythonのリストである配列のサイズを変更できます。


  1. Pythonの内部動作

    この記事では、Pythonの内部動作と、Pythonインタープリターによってさまざまなオブジェクトがメモリ内のスペースに割り当てられる方法について学習します。 Pythonは、Javaのようなオブジェクト指向プログラミング構築言語です。 Pythonはインタプリタを使用するため、インタプリタ言語と呼ばれます。 Pythonは、読みやすさを向上させ、時間とスペースの複雑さを最小限に抑えるために、ミニマリズムとモジュール性をサポートしています。 Pythonの標準実装は「cpython」と呼ばれ、cコードを使用してPythonで出力を取得できます。 Pythonは、ソースコードを一連のバイトコ

  2. Pythonでの継承

    この記事では、Python3.xでの継承と拡張クラスについて学習します。またはそれ以前。 継承は実際の関係をうまく表し、再利用性を提供し、推移性をサポートします。開発時間が短縮され、メンテナンスが容易になり、拡張も容易になります。 継承は大きく5つのタイプに分類されます- シングル 複数 階層的 マルチレベル ハイブリッド 上の図に示されているように、継承とは、実際に親クラスのオブジェクトを作成せずに、他のクラスの機能にアクセスしようとするプロセスです。 ここでは、単一の階層型継承の実装について学習します。 単一継承 例 # parent class class Studen