ウェブサイト検索

Python リスト データ構造を学ぶ - パート 1


データ構造は、データ型、それらの間の関係、およびデータに適用できる関数や操作の集合です。データ型は文字列整数浮動小数点値などです。

可変オブジェクトと不変オブジェクトの違いは何ですか?
可変オブジェクト
  1. 要素の追加、更新、削除など、作成後に状態を変更できるオブジェクト。
  2. List、Dictionary、Set、bytearray は、Python の可変オブジェクト型です。
不変オブジェクト
  1. オブジェクトの状態は変更できません。オブジェクトが作成されると、要素を追加、削除、更新することはできません。
  2. String、Integer、Tuples、Frozenset は、Python の不変オブジェクト型の一部です。
同種データ構造と異種データ構造の違いは何ですか?
  1. 同種のデータ構造 – データ要素は同じデータ型になります (例: 配列)。
  2. 異種データ構造 – データ要素は同じデータ型ではない場合があります (例: リスト、タプル、セットなど)。
プリミティブ データ型と非プリミティブ データ型とは何ですか?

組み込みデータ構造の機能を理解する前に、データ構造オブジェクトで使用されるいくつかの組み込み関数を見てみましょう。

  • dir(obj) – 属性とメソッドを返す組み込み関数。
  • len(obj) – オブジェクトの長さ (項目数) を返します。引数はシーケンス (文字列、バイト、タプル、リスト、範囲など) またはコレクション (辞書、セット、またはフリーズ セットなど) の場合があります。
  • del – この組み込みキーワードは、名前空間からオブジェクトを削除したり、リストや辞書などのオブジェクトから項目を削除したりするために使用されます。
  • type(obj) – type() 関数は、オブジェクトの型を返すか、渡された引数に基づいて新しい型のオブジェクトを返します。
  • id() – この関数はオブジェクトの「identity」を返します。これは、このオブジェクトの存続期間中、一意かつ一定であることが保証される整数です。

いくつかの重要な詳細を確認したので、Python データ構造に進みましょう。

Python には組み込みのデータ構造が付属しており、ユーザーは独自のデータ構造を定義できます。組み込みのデータ構造には、リスト辞書タプル、およびセットが含まれます。ユーザー定義のデータ構造の例としては、スタックキューツリーハッシュマップなどがあります。

他のプログラミング言語から来た人は、配列型に非常に精通しているでしょう。しかし、Python では、それらはそれほど一般的ではありません。

ここでリストは配列に似ていますが、リストでは任意のデータ型 (異種混合) の値を格納できますが、配列は特定の型 (int、float など) のデータのみを保持します。配列を使用するには、「配列」モジュールから配列を明示的にインポートする必要があります。

この Python 記事シリーズでは、データ構造Python の組み込みデータ構造とは何なのかを見ていきます。

リスト

リストは、さまざまなデータ型を集めたデータ構造です。 「さまざまな種類のデータの収集」とは何を意味しますか? リストには、文字列、整数、浮動小数点値、ネストされたリストなどを保存できます。

リスト オブジェクトは「変更可能」です。これは、リスト内に作成された項目にアクセス、変更、削除できることを意味します。リストはインデックス作成をサポートします。リスト内の各項目はアドレスに割り当てられ、そのアドレスを使用して特定の項目値にアクセスしたり、値を変更したりできます。

  • リストを作成する
  • リストの挿入/アクセス/変更
  • リストの削除

リストの作成

リストは角括弧を使用して作成できます。

>>> name_empty = []			# Empty list
>>> name = ['Karthi', 'Leo', 'Matt', 'Kane', 'Scott', 'Petter', 'Will']	# list with string data type
>>> name_int = [1,2,3]			# list with Integer data type
>>> name_mixed = [name_int,name,1,2,3.14]	# list with nested list items.
>>> name_mixed
[[1, 2, 3], ['Karthi', 'Leo', 'Matt', 'Kane', 'Scott', 'Petter', 'Will'], 1, 2, 3.14]
>>> name_int
[1, 2, 3]

組み込みの type() 関数を使用してオブジェクトのタイプを確認できます。

>>> type(name)

dir() 関数を使用して、リストインスタンスのメソッド属性にアクセスできます。

>>> dir(name)
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

len() メソッドを使用して、リスト内の項目の合計数を確認できます。

>>> len(name)

list.copy() メソッドを使用して、既存のリストから新しいリストを作成できます。

>>> name_new = name.copy()
>>> name_new
['Karthi', 'Leo', 'Matt', 'Kane', 'Scott', 'Petter', 'Will']

リストの挿入/アクセス/変更

list.insert(i, x) メソッドを使用して、リストの任意の位置に項目を挿入できます。

>>> name = ['Leo','Matt','Kane','Scott','Petter','Will']
>>> name
['Leo', 'Matt', 'Kane', 'Scott', 'Petter', 'Will']
>>> name.insert(0,'Tom')	# Insert method takes 2 arguments (Index position, Item)
>>> name
['Tom', 'Leo', 'Matt', 'Kane', 'Scott', 'Petter', 'Will']	# Tom is inserted at the 0th position.

list.append(x) メソッドを使用して、単一の項目をリストに追加できます。これにより、項目がリストの最後に挿入されます。

>>> name = []
>>> len(name)
0
>>> name.append('Leo')
>>> name.append('Matt')
>>> name.append('Kane')
>>> print(name)
['Leo', 'Matt', 'Kane']

list.extend() メソッドを使用して、複数の項目をリストに追加できます。

>>> new_name = ['Gowtham','Martin','Luis']
>>> name.extend(new_name)
>>> name
['Will', 'Petter', 'Scott', 'Kane', 'Matt', 'Leo', 'Karthi', 'Will', 'Gowtham', 'Martin', 'Luis']

'+' 演算子を使用して 2 つのリストを結合することもできます。どちらのリストも異なるデータ型にすることができます。

>>> a = [1,2,3]
>>> b = [2,3,3]
>>> c = a + b
>>> c
[1, 2, 3, 2, 3, 3]
>>> d = ['karthi','kenny']
>>> e = a + d
>>> e
[1, 2, 3, 'karthi', 'kenny']

すでに述べたように、オブジェクトは変更可能です。リスト項目は、インデックス位置を参照し、それに値を割り当てることで変更できます。

>>> name									# Before modified
['Tom', 'Leo', 'Matt', 'Kane', 'Scott', 'Petter', 'Will']
>>> name[0] = 'Karthi'
>>> name									# After Modified
['Karthi', 'Leo', 'Matt', 'Kane', 'Scott', 'Petter', 'Will']

リストは、ポジティブインデックスとネガティブインデックスの両方をサポートしています。

インデックス作成は 0 から始まり、ネガティブインデックス作成は -1 から始まります。

インデックス位置を使用してリスト項目にアクセスできます。

>>> name[0]			# Accessing the List item at index 0
'Leo'
>>> name[1]
'Matt'
>>> name[4]
'Petter'
>>> name[5]
'Will'
>>> name[-1]			# Accessing the list item with negative indexing
'Will'
>>> name[-6]
'Leo'

スライスを使用してリスト内の項目にアクセスすることもできます。スライスを使用すると、開始、終了、ステップのパラメーターを定義することで、さまざまな項目にアクセスできます。

SYNTAX: list[starting position, ending position, Step]

>>> name[0:3]
['Tom', 'Leo', 'Matt']
>>> name[:]
['Tom', 'Leo', 'Matt', 'Kane', 'Scott', 'Petter', 'Will']
>>> name[:4]
['Tom', 'Leo', 'Matt', 'Kane']
>>> name[:-2]
['Tom', 'Leo', 'Matt', 'Kane', 'Scott']
>>> name[:-1]
['Tom', 'Leo', 'Matt', 'Kane', 'Scott', 'Petter']
>>> name[:-1:2]
['Tom', 'Matt', 'Scott']

list.count(x) メソッドを使用して、指定された値の出現数を見つけることができます。

>>> name_int = [1,1,2,3,1]
>>> name_int.count(1)
3

list.index(x[, start[, end]]) メソッドを使用して、特定の項目のインデックス位置を見つけることができます。

>>> name			# Inserted ‘Will’ at the end of the list. Now we have 2 name ‘Will’.
['Will', 'Petter', 'Scott', 'Kane', 'Matt', 'Leo', 'Karthi', 'Will']
>>> name.index('Will)	# Returns the index position of first occurence of x.
0
>>> name.index('Will',2)	# Starting index positon’2’ is given.
7
>>> name.index('Will',2,4)	# Starting and Ending Index position is given. Since there is no 					occurence of ‘Will’ within the given search position it will throw 					Value Error.
Traceback (most recent call last):
File "<stdin>", line 1, in 
ValueError: 'Will' is not in list

list.reverse() メソッドを使用して、リスト内の項目を反転できます。

>>> name
['Karthi', 'Leo', 'Matt', 'Kane', 'Scott', 'Petter', 'Will']
>>> name.reverse()
>>> name
['Will', 'Petter', 'Scott', 'Kane', 'Matt', 'Leo', 'Karthi']

リストの削除

list.pop(x) メソッドを使用して、リストの x 位置にある項目を削除できます。この関数はリストから項目を削除し、削除された項目を表示します。 x が指定されていない場合、pop() メソッドはリストの最後の項目を返します。

>>> name
['Will', 'Petter', 'Scott', 'Kane', 'Matt', 'Leo', 'Karthi', 'Will', 'Gowtham', 'Martin', 'Luis']
>>> name.pop(0)
'Will'
>>> name
['Petter', 'Scott', 'Kane', 'Matt', 'Leo', 'Karthi', 'Will', 'Gowtham', 'Martin', 'Luis']
>>> name.pop()
'Luis'

list.remove (x) メソッドを使用してリストから項目を削除することもできます。ここで、x は項目の値を受け取り、x がリストにない場合は ValueError をスローします。

>>> name = ['Leo','Matt','Kane','Scott','Petter','Will']
>>> name.remove('Leo')
>>> name
['Matt', 'Kane', 'Scott', 'Petter', 'Will']
>>> name.remove('Leo')
Traceback (most recent call last):
  File "", line 1, in 
ValueError: list.remove(x): x not in list

リスト名を角かっこに割り当てるか、list.clear() メソッドを使用することで、リストを空にできます。

>>> name1 = name.copy()
>>> name1
['Petter', 'Scott', 'Kane', 'Matt', 'Leo', 'Karthi', 'Will', 'Gowtham', 'Martin']
>>> name
['Petter', 'Scott', 'Kane', 'Matt', 'Leo', 'Karthi', 'Will', 'Gowtham', 'Martin']
>>> name = []			
>>> name
[]
>>> name1.clear()		
>>> name1
[]

リスト メソッドを使用してリストを空にしたり、リストから項目を削除したりする代わりに、組み込みキーワード del を使用してこのアクションを実行できます。 “del” キーワードは、メモリからリスト オブジェクトを削除したり、リストから項目を削除したり、スライスから項目を削除したりできます。

>>> name = ['Leo','Matt','Kane','Scott','Petter','Will']
>>> del name[0]
>>> name
['Matt', 'Kane', 'Scott', 'Petter', 'Will']
>>> del name[-3:]
>>> name
['Matt', 'Kane']
>>> del name[:]
>>> name
[]

組み込みの id() 関数は、オブジェクトの「ID」を返します。これは、このオブジェクトの存続期間中、一意かつ一定であることが保証される整数です。

>>> id(name)
139979929658824
>>> del name
>>> id(name)
Traceback (most recent call last):
  File "", line 1, in 
NameError: name 'name' is not defined

: del() を使用してメモリからリスト変数を削除したため、名前エラーがスローされます。

help() funtion:

組み込みヘルプ function() は、特定のオブジェクトまたはそのオブジェクトのメソッドに関する詳細を取得するのに非常に役立ちます。

help(object)
help(object.method)
まとめ

この記事ではこれまで、リスト メソッドを使用してリスト データ構造を使用してリスト オブジェクトを保存、アクセス、変更、削除する方法を説明してきました。 id()dir()type()help()< などの組み込み関数もいくつか見てきました。非常に効果的な機能です。 Python にはリスト内包表記もあり、より簡潔で読みやすいリスト作成方法を提供します。