データ構造(リスト, タプル, セット, 辞書)

Pythonのデータ構造(リスト、タプル、セット、辞書)について動作確認します。内包表記などPython独特の記法も確認します。

リスト

概要

リストは、他の言語でいう 配列 のようなものです。

pythonには、標準モジュールとして 配列array もあります。
ただ、importせずに使える組み込み型の list で十分なことが多いです。

宣言|通常宣言

my_list = [1, 2, 3]
print(my_list)  # [1, 2, 3]

宣言|内包表記で宣言

利用例1

my_list = [i * 2 for i in range(3)]
print(my_list)  # [0, 2, 4]

for i in range(3) で取り出した値を i * 2 してリストを生成しています。

利用例2

my_list = [i for i in [1, 2, 3] if i > 1]
print(my_list)  # [2, 3]

for i in [1, 2, 3] で取り出した値の中で if i > 1 の値のみを対象にしたリストを生成しています。

宣言|list関数で宣言

my_list = list(range(-3, 3))
print(my_list)  # [-3, -2, -1, 0, 1, 2]

参照|インデックス

my_list = [1, 2, 3, 4, 5, 6]

# 負の値の場合、末尾から数えた要素を返す
print(my_list[0])   # 1
print(my_list[-1])  # 6

参照|スライス

my_list = [1, 2, 3, 4, 5, 6]

print(my_list[1:3])  # [2, 3]
print(my_list[:3])   # [1, 2, 3]
print(my_list[3:])   # [4, 5, 6]

listのメソッド

508-python-data-structure_list.png

listであれば、続けて利用できるメソッドが存在します。

copy

listは 参照渡し なので、他の変数に入れる場合に注意が必要です。

my_list1 = [1, 2, 3]
my_list2 = my_list1
my_list2[1] = 100

print(my_list1)  # [1, 100, 3]
print(my_list2)  # [1, 100, 3]

my_list2を変更すると、my_list1も変更されています。

別々にしたい場合、copyメソッド を利用します。

my_list1 = [1, 2, 3]
my_list2 = my_list1.copy()
my_list2[1] = 100

print(my_list1)  # [1, 2, 3]
print(my_list2)  # [1, 100, 3]

要素の追加と削除

# appendメソッドで要素を末尾に追加
my_list1 = [1, 2, 3]
my_list1.append(4)
print(my_list1)         # [1, 2, 3, 4]

# insertメソッドで指定インデックスに要素を挿入
my_list1.insert(2, 1.5)
print(my_list1)         # [1, 2, 1.5, 3, 4]

# removeメソッドで指定要素を削除
my_list1.remove(1.5)
print(my_list1)         # [1, 2, 3, 4]

# del文で指定インデックスの要素を削除
del my_list1[0]
print(my_list1)         # [2, 3, 4]

# popメソッドで要素をポップ
print(my_list1.pop())   # 4
print(my_list1)         # [2, 3]

# extendメソッドで別リストを結合
my_list1.extend([10, 20, 5])
print(my_list1)         # [2, 3, 10, 20, 5]

タプル

概要

  • リストと同じく、複数の値を1つにまとめられます。
    • リストを使う機会のほうが多いです。
  • 要素の追加・削除・変更ができません。
  • 辞書のキーなどに利用されます。
my_tuple = ("Man", "Woman")
print(my_tuple)         # ('Man', 'Woman')

カンマ( , ) が入った時点でタプルになります。

my_tuple = "Man", "Woman"
print(my_tuple)         # ('Man', 'Woman')
print(type(my_tuple))   # <class 'tuple'>

セット(集合)

概要

  • リストと同じく、複数の値を1つにまとめられます。
  • 要素の追加・削除・変更をすることができます。
  • 数学でいう「集合」を扱います。
  • 重複した要素は持つことができません。
  • 順番は必ずしも維持されません。
my_set = {"apple", "orange", "banana"}
print(my_set)

# 要素を追加
my_set.add("peach")
print(my_set)

# 要素を削除
my_set.remove("orange")
print(my_set)
{'banana', 'orange', 'apple'}
{'banana', 'orange', 'apple', 'peach'}
{'banana', 'apple', 'peach'}

集合演算

my_set1 = {1, 2, 3}
my_set2 = {2, 4, 5}

# 和集合
print(my_set1 | my_set2)    # {1, 2, 3, 4, 5}

# 積集合
print(my_set1 & my_set2)    # {2}

# 差集合
print(my_set1 - my_set2)    # {1, 3}

# 対称差集合
print(my_set1 ^ my_set2)    # {1, 3, 4, 5}

辞書

概要

  • リストと同じく、複数の値を1つにまとめられます。
  • 要素の追加・削除・変更をすることができます。
  • キーで値を管理します。
  • 連想配列と呼んでいる言語もあります。

宣言と参照

my_dict = {"国語": 90, "数学": 74, "英語": 80}
print(my_dict)              # {'国語': 90, '数学': 74, '英語': 80}

# keyを指定して、値を取得
print(my_dict["数学"])        # 74
print(my_dict.get("数学"))    # 74

# 全ての要素を取得
print(my_dict.items())      # dict_items([('国語', 90), ('数学', 74), ('英語', 80)])

# keyのみ取得
print(my_dict.keys())       # dict_keys(['国語', '数学', '英語'])

# valueのみ取得
print(my_dict.values())     # dict_values([90, 74, 80])

要素の追加と削除

my_dict = {"国語": 90, "数学": 74, "英語": 80}
print(my_dict)  # {'国語': 90, '数学': 74, '英語': 80}

# 要素を追加
my_dict["理科"] = 80
print(my_dict)  # {'国語': 90, '数学': 74, '英語': 80, '理科': 80}

# 要素を更新
my_dict.update({"英語": 92, "社会": 62})
print(my_dict)  # {'国語': 90, '数学': 74, '英語': 92, '理科': 80, '社会': 62}

# キーの存在判定
print("国語" in my_dict)  # True
print("美術" in my_dict)  # False

# 要素を削除
del my_dict["国語"]
print(my_dict)  # {'数学': 74, '英語': 92, '理科': 80, '社会': 62}

# 要素を全て削除
my_dict.clear()
print(my_dict)  # {}

参考

わくわくBank.
フリーランスのエンジニアとして活動してます。ここでは、ソフトウェア開発で必要とされる技術、用語、概念を整理しています。