データ構造 (リスト・タプル・集合・辞書)の要点
内容の確認日: 2026-10-04
この分野は「Pythonチュートリアル」の第 5 章 (データ構造) に対応し、試験で出題数が最も多い章です。リスト・タプル・集合・辞書の 4 つの型について、メソッドが何を返すか、元のデータを変えるかどうかが細かく問われます。
特に、リストのメソッドの多くは元のリストを変更して None を返す点と、変更できる型 (リスト・集合・辞書) と変更できない型 (タプル・文字列) の区別が重要です。
リストのメソッド
リストの主なメソッドは次のとおりです。
・append(x): 末尾に x を 1 つの要素として追加する (リストを渡すとリストのまま入る)
・extend(リスト): 要素を 1 つずつ末尾に追加する
・insert(i, x): 位置 i に挿入する
・remove(x): 最初に見つかった x を削除する。なければ ValueError
・pop()・pop(i): 末尾 (または位置 i) の要素を取り除いて返す
・index(x)・count(x): 位置・個数を返す
・sort()・reverse(): その場で並べ替える。戻り値は None
a = [3, 1, 2]a.append([4, 5])print(a, len(a))a.pop()a.extend([4, 5])a.insert(0, 0)print(a)print(a.pop(), a.pop(0), a)print(a.sort(), a)print(a.index(2), a.count(9))a.remove(9)python3 main.py [3, 1, 2, [4, 5]] 4 [0, 3, 1, 2, 4, 5] 5 0 [3, 1, 2, 4] None [1, 2, 3, 4] 1 0
例外が発生: ValueError
a.sort() は元のリストを並べ替えて None を返します。元のリストを変えずに並べ替えた新しいリストが欲しいときは、組み込み関数の sorted(a) を使います。
リスト内包表記
[式 for 変数 in イテラブル if 条件] の形のリスト内包表記で、リストを簡潔に作れます。for を複数書くと、左の for が外側のループになります。内包表記の中に内包表記を書くこともできます。
squares = [x ** 2 for x in range(6) if x % 2 == 0]pairs = [(x, y) for x in [1, 2] for y in "ab"]matrix = [[1, 2, 3], [4, 5, 6]]transposed = [[row[i] for row in matrix] for i in range(3)]print(squares)print(pairs)print(transposed)python3 main.py [0, 4, 16] [(1, 'a'), (1, 'b'), (2, 'a'), (2, 'b')] [[1, 4], [2, 5], [3, 6]]
del 文を使うと、位置やスライスを指定して要素を削除できます (del a[0]、del a[2:4])。
タプル
タプルは (1, "a") や、( ) を省略した 1, "a" のように書きます。リストと違って変更できない (イミュータブル) ので、要素に代入すると TypeError です。ただし、要素がリストのような変更できるオブジェクトなら、その中身は変更できます。
要素が 1 つのタプルは、(5,) のように末尾にカンマが必要です。(5) はただの整数 5 です。空のタプルは () です。タプルの要素を複数の変数にまとめて代入することをアンパックと呼びます (x, y = (1, 2))。
t = 1, "a", [2]t[2].append(3)print(t, type((5)), type((5,)))x, y, z = tprint(x, y, z)t[0] = 9python3 main.py (1, 'a', [2, 3]) <class 'int'> <class 'tuple'> 1 a [2, 3]
例外が発生: TypeError
集合
集合 (set) は、重複のない要素の集まりで、順序を持ちません。{1, 2, 3} か set(イテラブル) で作ります。空の集合は set() で作ります ({} は空の辞書になります)。
集合どうしは、& (積集合: 両方にある)・| (和集合: どちらかにある)・- (差集合: 左だけにある)・^ (対称差: どちらか一方にだけある) で演算できます。
a = {1, 2, 3, 3}b = {3, 4}print(len(a), type({}), type(set()))print(sorted(a & b), sorted(a | b), sorted(a - b), sorted(a ^ b))print(2 in a, sorted(set("banana")))python3 main.py 3 <class 'dict'> <class 'set'> [3] [1, 2, 3, 4] [1, 2] [1, 2, 4] True ['a', 'b', 'n']
集合には順序がないので、この例では sorted() で並べてから出力しています。
辞書
辞書 (dict) は、キーと値の組の集まりです。キーには、文字列・数値・タプルなどの変更できない値を使います (リストはキーにできません)。辞書は追加した順番を保ちます。
・d[キー] = 値: 追加 (キーがあれば値を更新)
・del d[キー]: 削除
・キー in d: キーがあるか (値ではなくキーを調べる)
・d[キー]: 値を取り出す。キーがなければ KeyError
・d.get(キー, 既定値): キーがなければ既定値 (省略時は None) を返す
・list(d): キーのリスト、sorted(d): 並べ替えたキーのリスト
stock = {"apple": 3, "lemon": 0}stock["apple"] = 5stock["peach"] = 2del stock["lemon"]print(stock, len(stock))print("apple" in stock, 5 in stock, stock.get("grape", 0))print(list(stock), sorted(stock.values()))print({x: x ** 2 for x in range(1, 4)})print(stock["grape"])python3 main.py {'apple': 5, 'peach': 2} 2 True False 0 ['apple', 'peach'] [2, 5] {1: 1, 2: 4, 3: 9}
例外が発生: KeyError
ループの技法
ループでよく使う関数・メソッドは次のとおりです。
・d.items(): 辞書のキーと値の組を取り出す
・enumerate(シーケンス, start=1): 位置と要素の組を取り出す (start で番号の始まりを変えられる)
・zip(a, b): 複数のシーケンスの同じ位置の要素を組にする (短い方に合わせる)
・reversed()・sorted(): 逆順・並べ替えた順にたどる
for i, name in enumerate(["sato", "ito"], start=1): print(i, name)for q, a in zip(["名前", "年齢", "職業"], ["Sato", 30]): print(q, a, sep=": ")for k, v in {"x": 1, "y": 2}.items(): print(k, v)print(list(reversed(range(3))))python3 main.py 1 sato 2 ito 名前: Sato 年齢: 30 x 1 y 2 [2, 1, 0]
シーケンスどうしの比較は、先頭の要素から順に比べる辞書式です ([1, 2, 3] < [1, 2, 4] は True)。== は値が等しいか、is は同じオブジェクトかを調べます。
試験でよくある引っかけ
appendとextenda.append([4, 5])はリストを 1 要素として追加し、a.extend([4, 5])は 2 つの要素を追加します。sort()の戻り値a.sort()はNoneを返します。b = a.sort()とするとbはNoneです。要素が 1 つのタプル
(5,)はタプル、(5)は整数です。末尾のカンマが必要です。空の集合
{}は空の辞書です。空の集合はset()で作ります。辞書の
in値 in 辞書はキーを調べます。値を調べるにはin d.values()とします。存在しないキー
d[キー]はキーがないとKeyErrorです。d.get(キー)ならNone(または既定値) を返します。
問題で確認する
この分野の問題を、解説つきで読めます (登録不要)。
出典・参考
コード例は、実際に実行して結果を確認しています。