チュートリアル

Python基礎構文:リストと辞書

Python入門リスト辞書データ構造
広告エリア

はじめに

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 ...}

その他

  • タプル: 変更不可のリスト
  • セット: 重複なしの集合

次回は「クラスとオブジェクト」について学びます。

広告エリア