Object-oriented-python-data-structures

提供:Dev Guides
移動先:案内検索

オブジェクト指向Python-データ構造

Pythonデータ構造は、構文の観点から非常に直感的であり、多くの操作を選択できます。 Pythonのデータ構造は、データの内容、変更が必要な場合、または固定データであるか、開始/終了/ランダムなどのアクセスタイプが必要かによって選択する必要があります。

リスト

リストは、Pythonで最も用途の広いタイプのデータ構造を表します。 リストは、角括弧の間にコンマ区切りの値(アイテムまたは要素)を保持するコンテナです。 リストは、複数の関連する値を処理する場合に役立ちます。 リストはデータをまとめて保持するため、複数の値に対して同じメソッドと操作を一度に実行できます。 リストのインデックスはゼロから始まり、文字列とは異なり、リストは可変です。

データ構造-リスト

>>>
>>> # Any Empty List
>>> empty_list = []
>>>
>>> # A list of String
>>> str_list = ['Life', 'Is', 'Beautiful']
>>> # A list of Integers
>>> int_list = [1, 4, 5, 9, 18]
>>>
>>> #Mixed items list
>>> mixed_list = ['This', 9, 'is', 18, 45.9, 'a', 54, 'mixed', 99, 'list']
>>> # To print the list
>>>
>>> print(empty_list)
[]
>>> print(str_list)
['Life', 'Is', 'Beautiful']
>>> print(type(str_list))
<class 'list'>
>>> print(int_list)
[1, 4, 5, 9, 18]
>>> print(mixed_list)
['This', 9, 'is', 18, 45.9, 'a', 54, 'mixed', 99, 'list']

Pythonリストのアイテムへのアクセス

リストの各項目には番号が割り当てられます。つまり、その番号のインデックスまたは位置です。インデックス付けは常にゼロから始まり、2番目のインデックスは1などです。 リスト内のアイテムにアクセスするには、角括弧内のこれらのインデックス番号を使用できます。 例のために次のコードを観察します-

>>> mixed_list = ['This', 9, 'is', 18, 45.9, 'a', 54, 'mixed', 99, 'list']
>>>
>>> # To access the First Item of the list
>>> mixed_list[0]
'This'
>>> # To access the 4th item
>>> mixed_list[3]
18
>>> # To access the last item of the list
>>> mixed_list[-1]
'list'

空のオブジェクト

空のオブジェクトは、最も単純で最も基本的なPython組み込み型です。 気付かずにそれらを複数回使用し、作成したすべてのクラスに拡張しました。 空のクラスを作成する主な目的は、一時的に何かをブロックし、後で拡張して動作を追加することです。

クラスに動作を追加するということは、データ構造をオブジェクトに置き換え、その参照をすべて変更することを意味します。 そのため、データを作成する前に、それが変装したオブジェクトであるかどうかを確認することが重要です。 理解を深めるために、次のコードを確認してください。

>>> #Empty objects
>>>
>>> obj = object()
>>> obj.x = 9
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
obj.x = 9
AttributeError: 'object' object has no attribute 'x'

したがって、上から、直接インスタンス化されたオブジェクトに属性を設定することは不可能であることがわかります。 Pythonがオブジェクトに任意の属性を持たせる場合、属性名とその値の両方を保存するために、各オブジェクトが持っている属性を追跡するために一定量のシステムメモリが必要です。 属性が保存されていない場合でも、潜在的な新しい属性に一定量のメモリが割り当てられます。

そのため、Pythonはデフォルトでオブジェクトおよびその他のいくつかのビルトインの任意のプロパティを無効にします。

>>> # Empty Objects
>>>
>>> class EmpObject:
    pass
>>> obj = EmpObject()
>>> obj.x = 'Hello, World!'
>>> obj.x
'Hello, World!'

したがって、プロパティをグループ化する場合は、上記のコードに示すように、空のオブジェクトにプロパティを保存できます。 ただし、この方法は常に推奨されるわけではありません。 クラスとオブジェクトは、データと動作の両方を指定する場合にのみ使用してください。

タプル

タプルはリストに似ており、要素を保存できます。 ただし、これらは不変であるため、オブジェクトを追加、削除、または置換することはできません。 タプルが不変であるために提供される主な利点は、辞書で、またはオブジェクトがハッシュ値を必要とする他の場所でキーとして使用できることです。

タプルはデータを保存するために使用され、動作ではありません。 タプルを操作する動作が必要な場合は、アクションを実行する関数(または別のオブジェクトのメソッド)にタプルを渡す必要があります。

タプルはディクショナリキーとして機能できるため、格納されている値は互いに異なります。 値をコンマで区切ってタプルを作成できます。 タプルは括弧で囲まれていますが、必須ではありません。 次のコードは、2つの同一の割り当てを示しています。

>>> stock1 = 'MSFT', 95.00, 97.45, 92.45
>>> stock2 = ('MSFT', 95.00, 97.45, 92.45)
>>> type (stock1)
<class 'tuple'>
>>> type(stock2)
<class 'tuple'>
>>> stock1 == stock2
True
>>>

タプルの定義

タプルはリストと非常に似ていますが、要素のセット全体が角括弧ではなく括弧で囲まれている点が異なります。

リストをスライスするときに新しいリストを取得し、タプルをスライスするときに新しいタプルを取得するように。

>>> tupl = ('Tuple','is', 'an','IMMUTABLE', 'list')
>>> tupl
('Tuple', 'is', 'an', 'IMMUTABLE', 'list')
>>> tupl[0]
'Tuple'
>>> tupl[-1]
'list'
>>> tupl[1:3]
('is', 'an')

Pythonタプルメソッド

次のコードは、Pythonタプルのメソッドを示しています-

>>> tupl
('Tuple', 'is', 'an', 'IMMUTABLE', 'list')
>>> tupl.append('new')
Traceback (most recent call last):
   File "<pyshell#148>", line 1, in <module>
      tupl.append('new')
AttributeError: 'tuple' object has no attribute 'append'
>>> tupl.remove('is')
Traceback (most recent call last):
   File "<pyshell#149>", line 1, in <module>
      tupl.remove('is')
AttributeError: 'tuple' object has no attribute 'remove'
>>> tupl.index('list')
4
>>> tupl.index('new')
Traceback (most recent call last):
   File "<pyshell#151>", line 1, in <module>
      tupl.index('new')
ValueError: tuple.index(x): x not in tuple
>>> "is" in tupl
True
>>> tupl.count('is')
1

上記のコードから、タプルは不変であり、したがって-

  • タプルに要素を追加することはできません。
  • メソッドを追加または拡張することはできません。
  • タプルから要素を削除することはできません。
  • タプルには、removeまたはpopメソッドがありません。
  • カウントとインデックスは、タプルで使用できるメソッドです。

辞書

辞書はPythonの組み込みデータ型の1つであり、キーと値の間の1対1の関係を定義します。

辞書の定義

辞書の定義について理解するために、次のコードを観察します-

>>> # empty dictionary
>>> my_dict = {}
>>>
>>> # dictionary with integer keys
>>> my_dict = { 1:'msft', 2: 'IT'}
>>>
>>> # dictionary with mixed keys
>>> my_dict = {'name': 'Aarav', 1: [ 2, 4, 10]}
>>>
>>> # using built-in function dict()
>>> my_dict = dict({1:'msft', 2:'IT'})
>>>
>>> # From sequence having each item as a pair
>>> my_dict = dict([(1,'msft'), (2,'IT')])
>>>
>>> # Accessing elements of a dictionary
>>> my_dict[1]
'msft'
>>> my_dict[2]
'IT'
>>> my_dict['IT']
Traceback (most recent call last):
   File "<pyshell#177>", line 1, in <module>
   my_dict['IT']
KeyError: 'IT'
>>>

上記のコードから、次のことがわかります。

  • まず、2つの要素を持つ辞書を作成し、変数に割り当てます my_dict 。 各要素はキーと値のペアであり、要素のセット全体が中括弧で囲まれています。
  • 番号 1 はキーで、 msft はその値です。 同様に、 2 がキーで、 IT はそのキーです 値。
  • キーで値を取得できますが、その逆はできません。 したがって、 my_dict [‘IT’] を試してみると、 IT はキーではないため、例外が発生します。

辞書の変更

辞書の変更について理解するために、次のコードを観察します-

>>> # Modifying a Dictionary
>>>
>>> my_dict
{1: 'msft', 2: 'IT'}
>>> my_dict[2] = 'Software'
>>> my_dict
{1: 'msft', 2: 'Software'}
>>>
>>> my_dict[3] = 'Microsoft Technologies'
>>> my_dict
{1: 'msft', 2: 'Software', 3: 'Microsoft Technologies'}

上記のコードから、次のことがわかります-

  • 辞書に重複したキーを含めることはできません。 既存のキーの値を変更すると、古い値が削除されます。
  • 新しいキーと値のペアはいつでも追加できます。
  • 辞書には、要素間の順序の概念はありません。 それらは単純な順序付けられていないコレクションです。

辞書でのデータ型の混合

辞書内のデータ型の混合について理解するために、次のコードを観察します-

>>> # Mixing Data Types in a Dictionary
>>>
>>> my_dict
{1: 'msft', 2: 'Software', 3: 'Microsoft Technologies'}
>>> my_dict[4] = 'Operating System'
>>> my_dict
{1: 'msft', 2: 'Software', 3: 'Microsoft Technologies', 4: 'Operating System'}
>>> my_dict['Bill Gates'] = 'Owner'
>>> my_dict
{1: 'msft', 2: 'Software', 3: 'Microsoft Technologies', 4: 'Operating System',
'Bill Gates': 'Owner'}

上記のコードから、次のことがわかります-

  • 文字列だけでなく、ディクショナリ値は、ディクショナリ自体を含む文字列、整数を含む任意のデータ型にすることができます。
  • ディクショナリ値とは異なり、ディクショナリキーはより制限されていますが、文字列、整数などの任意のタイプにすることができます。

辞書からアイテムを削除する

辞書からアイテムを削除することを理解するために、次のコードを観察します-

>>> # Deleting Items from a Dictionary
>>>
>>> my_dict
{1: 'msft', 2: 'Software', 3: 'Microsoft Technologies', 4: 'Operating System',
'Bill Gates': 'Owner'}
>>>
>>> del my_dict['Bill Gates']
>>> my_dict
{1: 'msft', 2: 'Software', 3: 'Microsoft Technologies', 4: 'Operating System'}
>>>
>>> my_dict.clear()
>>> my_dict
{}

上記のコードから、次のことがわかります-

  • del -キーから辞書から個々のアイテムを削除できます。
  • clear -辞書からすべてのアイテムを削除します。

Sets

Set()は、要素が重複していない順序付けられていないコレクションです。 個々のアイテムは不変ですが、セット自体は可変です。つまり、セットに要素/アイテムを追加または削除できます。 ユニオン、インターセクションなどの数学演算を実行できます。 セットで。

一般にセットはツリーを使用して実装できますが、Pythonのセットはハッシュテーブルを使用して実装できます。 これにより、特定の要素がセットに含まれているかどうかを確認するための高度に最適化された方法が可能になります

セットを作成する

セットを作成するには、すべてのアイテム(要素)を中括弧 \ {} 内に配置し、コンマで区切るか、組み込み関数* set()*を使用します。 次のコード行を確認してください-

>>> #set of integers
>>> my_set = {1,2,4,8}
>>> print(my_set)
{8, 1, 2, 4}
>>>
>>> #set of mixed datatypes
>>> my_set = {1.0, "Hello World!", (2, 4, 6)}
>>> print(my_set)
{1.0, (2, 4, 6), 'Hello World!'}
>>>

セットのメソッド

セットのメソッドについて理解するために、次のコードを観察します-

>>> >>> #METHODS FOR SETS
>>>
>>> #add(x) Method
>>> topics = {'Python', 'Java', 'C#'}
>>> topics.add('C++')
>>> topics
{'C#', 'C++', 'Java', 'Python'}
>>>
>>> #union(s) Method, returns a union of two set.
>>> topics
{'C#', 'C++', 'Java', 'Python'}
>>> team = {'Developer', 'Content Writer', 'Editor','Tester'}
>>> group = topics.union(team)
>>> group
{'Tester', 'C#', 'Python', 'Editor', 'Developer', 'C++', 'Java', 'Content
Writer'}
>>> # intersets(s) method, returns an intersection of two sets
>>> inters = topics.intersection(team)
>>> inters
set()
>>>
>>> # difference(s) Method, returns a set containing all the elements of
invoking set but not of the second set.
>>>
>>> safe = topics.difference(team)
>>> safe
{'Python', 'C++', 'Java', 'C#'}
>>>
>>> diff = topics.difference(group)
>>> diff
set()
>>> #clear() Method, Empties the whole set.
>>> group.clear()
>>> group
set()
>>>

セットの演算子

セットの演算子について理解するために、次のコードを観察します-

>>> # PYTHON SET OPERATIONS
>>>
>>> #Creating two sets
>>> set1 = set()
>>> set2 = set()
>>>
>>> # Adding elements to set
>>> for i in range(1,5):
   set1.add(i)
>>> for j in range(4,9):
   set2.add(j)
>>> set1
{1, 2, 3, 4}
>>> set2
{4, 5, 6, 7, 8}
>>>
>>> #Union of set1 and set2
>>> set3 = set1 | set2 # same as set1.union(set2)
>>> print('Union of set1 & set2: set3 = ', set3)
Union of set1 & set2: set3 = {1, 2, 3, 4, 5, 6, 7, 8}
>>>
>>> #Intersection of set1 & set2
>>> set4 = set1 & set2 # same as set1.intersection(set2)
>>> print('Intersection of set1 and set2: set4 = ', set4)
Intersection of set1 and set2: set4 = {4}
>>>
>>> # Checking relation between set3 and set4
>>> if set3 > set4: # set3.issuperset(set4)
   print('Set3 is superset of set4')
elif set3 < set4: #set3.issubset(set4)
   print('Set3 is subset of set4')
else: #set3 == set4
   print('Set 3 is same as set4')
Set3 is superset of set4
>>>
>>> # Difference between set3 and set4
>>> set5 = set3 - set4
>>> print('Elements in set3 and not in set4: set5 = ', set5)
Elements in set3 and not in set4: set5 = {1, 2, 3, 5, 6, 7, 8}
>>>
>>> # Check if set4 and set5 are disjoint sets
>>> if set4.isdisjoint(set5):
   print('Set4 and set5 have nothing in common\n')
Set4 and set5 have nothing in common
>>> # Removing all the values of set5
>>> set5.clear()
>>> set5 set()