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のメソッド
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) # {}