この記事で学べる知識:データ構造の種類
この記事に関係する知識:
レッスン1~3の知識、リストの定義と要素追加、リストの要素削除、リストの情報出力、リストの集計・並べ替え、リストのスライス、リストのループ処理、リストの内包表記、データ構造の種類、タプルの定義と基本操作、タプルのアンパックとネスト、辞書の定義と基本操作、辞書のループ処理、辞書の内包表記、集合の定義と基本操作
<<前の問題 | 問題集Top |
次の問題>> |
Pythonの「データ構造」とは
この章ではPythonにおける「データ構造」の種類や概要・違いを学習します。練習問題はありません。
Pythonには、これまで学習してきたリスト以外にも、データを効率的に管理・操作できるデータ構造が複数用意されています。
特にリスト、タプル、辞書、集合の4つは日常的に使われる基本的なデータ構造です。
それぞれの細かい特徴や使い方は別の記事で紹介しますが、この記事で全体の概要を掴んでおくとのちの学習がスムーズに進みます。
是非このページをブックマークして、都度戻ってきて役立ててください。
以下に、これら4つのデータ構造の特徴と違いをまとめた表を示します。
構造 | 順序 | 書き換え可能か | 重複の許可 | 定義の書き方 |
リスト | あり | 可能 | 可能 | [要素1, 要素2] |
タプル | あり | 不可能 | 可能 | (要素1, 要素2) |
辞書 | なし (キーで管理) |
可能 | キーは不可 値は可 |
{キー1: 値1,キー2: 値2} |
集合 | なし | 可能 | 不可 | {要素1, 要素2} |
まだ学習前の段階でこの表を見てもピンとこないかもしれません。
この表の違いを端的に表したコードを用意しましたのでこちらを確認してください。
# リストを使って、順序を持ち変更可能なフルーツのリストを作成 fruits = ['apple', 'banana', 'cherry'] fruits.append('orange') # 'orange'を追加 fruits.remove('apple') # 'apple'を削除 print("リスト:", fruits) # 出力: ['banana', 'cherry', 'orange'] # タプルを使って、変更できない(immutable)要素を作成 number = (100, 200) # number[0] = 300 ← この部分をコメントではなくすとエラーが発生します print("タプル:", number) # 出力: (100, 200) # 辞書を使って、名前や年齢などの個人情報をキーを使って管理 person = {'name': 'Alice', 'age': 30, 'city': 'Tokyo'} print("辞書:", person['name']) # 出力: 'Alice' # 集合を使って、AグループとBグループの両方に属している人を表示 A_group = {'太郎', '次郎', '三郎'} B_group = {'太郎', '三郎', '四郎'} common_members = A_group & B_group # AとBの両方に属している人(積集合) print("集合(両方のグループに属している人):", common_members) # 出力: {'太郎', '三郎'}
このコードを実行すると以下のように出力されます。
リスト: ['banana', 'cherry', 'orange'] タプル: (100, 200) Alice 集合(両方のグループに属している人): {'太郎', '三郎'}
このように、それぞれのデータ構造には特色があり、使い分けることでより柔軟なコードが書けるようになります。
以下に、それぞれのデータ構造について詳しく見ていきますが、こちらは教科書というより辞書のように使うことを想定しています。
ざっくり読んで雰囲気を掴んだら次の記事へ進み、そこで細かい使い方を勉強しましょう。そして後でそれぞれの違いに混乱が生じたら、またこのページに戻ってきてください。
リスト(List)とは
リストは角括[]
を使って定義します。リスト内の要素はカンマ「,
」で区切り、任意のデータ型を含めることができます。
変数名 = [要素1, 要素2, 要素3]
リストの使用例は以下の通り。
fruits = ['apple', 'banana', 'cherry']
リストの主な操作
- 要素の追加 :
append()
メソッド: リストの最後に要素を追加するextend()
メソッド: リストに他のリストやイテラブルを追加するinsert()
メソッド: 指定した位置に要素を挿入する
- 要素の削除 :
clear()
メソッド: リスト内のすべての要素を削除するremove()
メソッド: 指定した値に一致する最初の要素を削除するpop()
メソッド: 指定した位置、または最後の要素を削除して返すdel
ステートメント: 指定したインデックスの要素を削除する
- 情報の取得 :
len()
関数: リストの要素数を返すcount()
メソッド: 指定した値の出現回数を返すindex()
メソッド: 指定した値が最初に現れるインデックスを返すin
演算子: 要素がリスト内に存在するかを判定する
- 集計・並び替え :
min()
関数: リストの最小値を返すmax()
関数: リストの最大値を返すsum()
関数: リスト内の数値要素の合計を返すsort()
メソッド: リストを昇順に並び替えるreverse()
メソッド: リストの要素を逆順に並び替える
タプル(Tuple)とは
タプルは丸括弧()
を使って定義します。
リストとは異なりタプルの要素は変更できません。また1つだけの要素を持つタプルを作る場合は、要素の後にカンマを付ける必要があります。
変数名 = (要素1, 要素2, 要素3)
タプルの使用例は以下の通り。
dimensions = (1920, 1080) single_element_tuple = (5,) # 1つの要素を持つタプル
タプルの主な操作
- 要素の追加: タプルは不変(immutable)であるため、要素の追加はできません。
- 要素の削除: タプルは不変(immutable)であるため、要素の削除もできません。
- 情報の取得 :
len()
関数: タプルの要素数を返すcount()
メソッド: 指定した値の出現回数を返すindex()
メソッド: 指定した値が最初に現れるインデックスを返すin
演算子: 要素がタプル内に存在するかを判定する
- 文字列との操作 :
split()
:メソッド 文字列を指定した区切り文字で分割し、タプルとして返す(文字列メソッドとして使用)join()
メソッド: リストやタプルの要素を文字列として結合する(文字列メソッドとして使用)
辞書(Dictionary)とは
辞書は波括弧{}
を使って定義し、キーと値のペアを保持します。
キーと値はコロン「:
」で区切られ、複数のペアはカンマ「,
」で区切ります。キーは文字列や数値であり、値は任意のデータ型を持つことができます。
変数名 = {キー1: 値1, キー2: 値2}
辞書の使用例は以下の通り。
person = {'name': 'Alice', 'age': 30, 'city': 'Tokyo'}
辞書の主な操作
- 要素の追加/更新 :
update()
メソッド: 他の辞書を追加または既存のキーの値を更新するsetdefault()
メソッド: 指定したキーが存在しない場合に値を追加する
- 要素の削除 :
clear()
メソッド: 辞書内のすべての要素を削除するpop()
メソッド: 指定したキーの値を削除して返すpopitem()
メソッド: 最後のキーと値のペアを削除して返すdel
ステートメント: 指定したキーとそのペアを削除する
- 情報の取得 :
len()
関数: 辞書内のキーと値のペアの数を返すkeys()
メソッド: 辞書内のすべてのキーを返すvalues()
メソッド: 辞書内のすべての値を返すitems()
メソッド: 辞書内のキーと値のペアをタプルとして返すin
演算子: 指定したキーが辞書に存在するかを判定する
集合(Set)とは
集合は波括弧{}
を使って定義しますが、辞書とは違い要素は重複しません。集合の要素は順序を持たないため、順序に依存した操作はできません。
変数名 = {要素1, 要素2, 要素3}
集合の使用例は以下の通り。
fruits_set = {'apple', 'banana', 'cherry'}
集合の主な操作
- 要素の追加 :
add()
メソッド: 集合に要素を追加するupdate()
メソッド: 他の集合やイテラブルを追加する
- 要素の削除 :
remove()
メソッド: 指定した要素を削除する(要素が存在しない場合エラーを発生)discard()
メソッド: 指定した要素を削除する(要素が存在しない場合は無視)pop()
メソッド: 集合からランダムに要素を削除して返すclear()
メソッド: 集合のすべての要素を削除する
- 集合演算 :
union()
メソッド: 2つの集合の和集合を返すintersection()
メソッド: 2つの集合の積集合を返すdifference()
メソッド: 2つの集合の差集合を返す
- 情報の取得 :
len()
関数: 集合の要素数を返すin
演算子: 要素が集合内に存在するかを判定する
メソッド/関数/演算子/文の違いと使い方
リスト等のデータ構造を操作するにはメソッドや関数等を使用しますが、これらはそれぞれ使い方が異なります。
以下に簡単にまとめます。
メソッドとは?
メソッドとは特定のデータ型に関連付けられた関数です。
リスト、辞書、タプル、集合それぞれ固有のメソッドがあります。メソッドを使うことでそのデータ型に対して特定の操作を簡単に行うことができます。
メソッドの使い方
メソッドはオブジェクト.メソッド名()という形式で使用します。
まず操作したいオブジェクトに対してドット(.
)を使ってメソッドを呼び出し、必要な引数を渡します。
# 基本的な構文 オブジェクト.メソッド名(引数)
例:リストのappend()
メソッド
例えばリストに要素を追加するappend()
メソッドを使う場合、次のように書きます。
my_list = [ 1, 2, 3] my_list.append(4) # リストの末尾に4を追加 print(my_list) # 出力: [ 1, 2, 3, 4]
この例ではmy_list
というリストにappend()
メソッドを使って、末尾に新しい要素4
を追加しています。
関数とは?
関数は特定の処理をまとめたコードブロックで、呼び出すとその処理を実行します。
Pythonには組み込みの関数(len()
やsorted()
など)が多く用意されていますが、それらはデータ型に依存しないので、リストやタプルなど様々なデータ型に対して適用可能です。
関数の使い方
関数は次のように書いて呼び出します。
関数名(引数)
例:len()
関数
len()
関数はリストやタプル、辞書などの要素数を返します。
my_list = [ 1, 2, 3] length = len(my_list) # リストの要素数を取得 print(length) # 出力: 3
この例ではlen()
関数を使ってリストの要素数(長さ)を取得し、3
が出力されます。
演算子とは?
演算子はデータを操作するための記号やキーワードです。
in
演算子はリストや辞書、集合などのデータ構造に対して、特定の要素が存在するかどうかを確認するために使います。
例:in
演算子
in
演算子を使うと、リストや辞書などの中に特定の要素が含まれているかどうかを調べることができます。
my_list = [ 1, 2, 3, 4] if 3 in my_list: print("3はリストに含まれています") else: print("3はリストに含まれていません")
この例ではin
演算子を使って、リストmy_list
に3
が含まれているかどうかを確認しています。
結果として3はリストに含まれています
というメッセージが表示されます。
ステートメントとは?
ステートメントはPythonで命令を実行するための文です。
del
ステートメントは変数やリストの要素、辞書のキーと値のペアなどを削除するために使われます。
例:del
ステートメント
del
ステートメントを使うとリストの特定の要素を削除したり、辞書のキーと値のペアを削除することができます。
my_list = [ 1, 2, 3, 4] del my_list[ 1] # インデックス1の要素を削除 print(my_list) # 出力: [ 1, 3, 4]
この例ではdel
ステートメントを使って、リストmy_list
のインデックス1にある要素(2
)を削除しています。
結果としてリストは[ 1, 3, 4]
となります。
また、del
ステートメントは辞書のキーを削除するためにも使用できます。
my_dict = {"a": 1, "b": 2, "c": 3} del my_dict["b"] # キー "b" とその値を削除 print(my_dict) # 出力: {'a': 1, 'c': 3}
この例では辞書my_dict
からキー"b"
とその値を削除しています。
結果として辞書は{'a': 1, 'c': 3}
となります。
<<前の問題 |
問題集Top |
次の問題>> |
この記事への質問・コメント
この記事を作成するにあたりAIを活用しています。
問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。