はじめに
Python基礎構文シリーズ第5回は「リストと辞書」です。複数のデータをまとめて扱うための基本的なデータ構造を学びます。
リスト(list)
リストは、複数の要素を順序付きで格納するデータ構造です。
基本的な使い方
# リストの作成
fruits = ["りんご", "みかん", "バナナ"]
numbers = [1, 2, 3, 4, 5]
mixed = [1, "hello", True, 3.14] # 異なる型も混在可能
# 空のリスト
empty = []
empty = list()
print(fruits) # ['りんご', 'みかん', 'バナナ']
print(len(fruits)) # 3
インデックスアクセス
fruits = ["りんご", "みかん", "バナナ", "ぶどう"]
# 先頭から(0始まり)
print(fruits[0]) # りんご
print(fruits[1]) # みかん
# 末尾から(-1始まり)
print(fruits[-1]) # ぶどう
print(fruits[-2]) # バナナ
スライス
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# [開始:終了] - 終了は含まない
print(numbers[2:5]) # [2, 3, 4]
print(numbers[:3]) # [0, 1, 2](先頭から)
print(numbers[7:]) # [7, 8, 9](末尾まで)
print(numbers[-3:]) # [7, 8, 9]
# [開始:終了:ステップ]
print(numbers[::2]) # [0, 2, 4, 6, 8](2つおき)
print(numbers[::-1]) # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0](逆順)
要素の追加
fruits = ["りんご", "みかん"]
# 末尾に追加
fruits.append("バナナ")
print(fruits) # ['りんご', 'みかん', 'バナナ']
# 指定位置に挿入
fruits.insert(1, "ぶどう")
print(fruits) # ['りんご', 'ぶどう', 'みかん', 'バナナ']
# 複数要素を追加
fruits.extend(["メロン", "いちご"])
print(fruits) # ['りんご', 'ぶどう', 'みかん', 'バナナ', 'メロン', 'いちご']
要素の削除
fruits = ["りんご", "みかん", "バナナ", "みかん"]
# 値を指定して削除(最初の1つ)
fruits.remove("みかん")
print(fruits) # ['りんご', 'バナナ', 'みかん']
# インデックスを指定して削除
del fruits[0]
print(fruits) # ['バナナ', 'みかん']
# 末尾を取り出して削除
last = fruits.pop()
print(last) # みかん
print(fruits) # ['バナナ']
# 全削除
fruits.clear()
print(fruits) # []
検索とカウント
fruits = ["りんご", "みかん", "バナナ", "みかん"]
# 存在確認
print("みかん" in fruits) # True
print("メロン" in fruits) # False
# インデックスを取得
print(fruits.index("バナナ")) # 2
# 出現回数
print(fruits.count("みかん")) # 2
ソート
numbers = [3, 1, 4, 1, 5, 9, 2, 6]
# 元のリストを変更
numbers.sort()
print(numbers) # [1, 1, 2, 3, 4, 5, 6, 9]
numbers.sort(reverse=True)
print(numbers) # [9, 6, 5, 4, 3, 2, 1, 1]
# 新しいリストを返す(元は変更しない)
original = [3, 1, 4, 1, 5]
sorted_list = sorted(original)
print(original) # [3, 1, 4, 1, 5](変わらない)
print(sorted_list) # [1, 1, 3, 4, 5]
リスト内包表記
# 通常のループ
squares = []
for i in range(5):
squares.append(i ** 2)
# リスト内包表記
squares = [i ** 2 for i in range(5)]
print(squares) # [0, 1, 4, 9, 16]
# 条件付き
evens = [i for i in range(10) if i % 2 == 0]
print(evens) # [0, 2, 4, 6, 8]
# 文字列処理
words = ["hello", "world", "python"]
upper_words = [w.upper() for w in words]
print(upper_words) # ['HELLO', 'WORLD', 'PYTHON']
辞書(dict)
辞書は、キーと値のペアでデータを格納するデータ構造です。
基本的な使い方
# 辞書の作成
user = {
"name": "太郎",
"age": 25,
"city": "東京"
}
# 空の辞書
empty = {}
empty = dict()
print(user) # {'name': '太郎', 'age': 25, 'city': '東京'}
値へのアクセス
user = {"name": "太郎", "age": 25, "city": "東京"}
# キーでアクセス
print(user["name"]) # 太郎
# 存在しないキーはエラー
# print(user["email"]) # KeyError
# get()メソッド(存在しない場合はNone)
print(user.get("email")) # None
print(user.get("email", "未設定")) # 未設定(デフォルト値)
要素の追加・更新
user = {"name": "太郎", "age": 25}
# 追加
user["city"] = "東京"
print(user) # {'name': '太郎', 'age': 25, 'city': '東京'}
# 更新
user["age"] = 26
print(user) # {'name': '太郎', 'age': 26, 'city': '東京'}
# 複数を一度に更新
user.update({"age": 27, "email": "taro@example.com"})
print(user)
要素の削除
user = {"name": "太郎", "age": 25, "city": "東京"}
# キーを指定して削除
del user["city"]
print(user) # {'name': '太郎', 'age': 25}
# 取り出して削除
age = user.pop("age")
print(age) # 25
print(user) # {'name': '太郎'}
# 全削除
user.clear()
キー・値の取得
user = {"name": "太郎", "age": 25, "city": "東京"}
# キー一覧
print(user.keys()) # dict_keys(['name', 'age', 'city'])
print(list(user.keys())) # ['name', 'age', 'city']
# 値一覧
print(user.values()) # dict_values(['太郎', 25, '東京'])
# キーと値のペア
print(user.items()) # dict_items([('name', '太郎'), ('age', 25), ('city', '東京')])
ループ処理
user = {"name": "太郎", "age": 25, "city": "東京"}
# キーでループ
for key in user:
print(key)
# キーと値でループ
for key, value in user.items():
print(f"{key}: {value}")
存在確認
user = {"name": "太郎", "age": 25}
print("name" in user) # True
print("email" in user) # False
辞書内包表記
# 数値の2乗を辞書で
squares = {i: i ** 2 for i in range(5)}
print(squares) # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
# 条件付き
evens = {i: i ** 2 for i in range(10) if i % 2 == 0}
print(evens) # {0: 0, 2: 4, 4: 16, 6: 36, 8: 64}
タプル(tuple)
リストに似ていますが、作成後に変更できません(イミュータブル)。
# タプルの作成
point = (10, 20)
colors = ("red", "green", "blue")
# アクセスはリストと同じ
print(point[0]) # 10
# 変更はできない
# point[0] = 30 # エラー
# アンパック
x, y = point
print(x, y) # 10 20
セット(set)
重複のない要素の集合です。
# セットの作成
numbers = {1, 2, 3, 3, 4, 4, 5}
print(numbers) # {1, 2, 3, 4, 5}(重複が除去される)
# 追加
numbers.add(6)
# 削除
numbers.remove(1)
# 集合演算
a = {1, 2, 3, 4}
b = {3, 4, 5, 6}
print(a | b) # 和集合: {1, 2, 3, 4, 5, 6}
print(a & b) # 積集合: {3, 4}
print(a - b) # 差集合: {1, 2}
まとめ
リスト
- 順序付きの要素の集まり
append(),insert(),remove(),pop()- スライス:
list[start:end:step] - リスト内包表記:
[式 for 変数 in イテラブル]
辞書
- キーと値のペア
get(),update(),pop()keys(),values(),items()- 辞書内包表記:
{キー: 値 for ...}
その他
- タプル: 変更不可のリスト
- セット: 重複なしの集合
次回は「クラスとオブジェクト」について学びます。