Kodrill

データ構造 (リスト・タプル・集合・辞書)

Python 3 エンジニア認定基礎試験

リストのメソッドと内包表記/タプル/集合/辞書/ループの技法

問題数
16 問
合格ライン
70%
実行して確認済み
16 問
この分野の要点を読む7 章・約 8 分。実行して確かめたコード例と、試験でよくある引っかけをまとめています

ログインなしで試す

無料の 5 問を、1問ごとに正誤と解説を見ながら解けます。解答は保存されません。

5 問を試す

無料登録して学習を記録する

学習履歴・ダッシュボード・ブックマーク・模試モードが使えます。

★ 残り 11 問はプレミアム会員限定です

無料プランでは先頭 5 問まで解けます。プレミアムなら全問題・苦手問題の復習・広告非表示が使えます。
料金プランを見る

問題と解説を見る (無料)

登録しなくても、次の5問は問題文と解説をそのまま読めます。

データ構造 (リスト・タプル・集合・辞書)の要点

内容の確認日: 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

Python
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 が外側のループになります。内包表記の中に内包表記を書くこともできます。

Python
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))。

Python
t = 1, "a", [2]t[2].append(3)print(t, type((5)), type((5,)))x, y, z = tprint(x, y, z)t[0] = 9
ターミナル
python3 main.py
(1, 'a', [2, 3]) <class 'int'> <class 'tuple'>
1 a [2, 3]

例外が発生: TypeError

集合

集合 (set) は、重複のない要素の集まりで、順序を持ちません。{1, 2, 3} か set(イテラブル) で作ります。空の集合は set() で作ります ({} は空の辞書になります)。

集合どうしは、& (積集合: 両方にある)・| (和集合: どちらかにある)・- (差集合: 左だけにある)・^ (対称差: どちらか一方にだけある) で演算できます。

Python
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): 並べ替えたキーのリスト

Python
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(): 逆順・並べ替えた順にたどる

Python
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 と extend

    a.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 (または既定値) を返します。

問題で確認する

この分野の問題を、解説つきで読めます (登録不要)。

出典・参考

コード例は、実際に実行して結果を確認しています。