第5章 データ構造(40問中7問)
Python3基礎試験のデータ構造:リスト・タプル・集合・辞書の違い
第5章のデータ構造は、リスト・タプル・集合・辞書の4つの型を、変更できるか、順序があるか、重複できるかで見分ける章です。このページでは、試験で問われやすい動きを、Python 3.9.6で実際に実行した結果で確かめます。覚えるのは、タプルの要素には代入できないこと、空の波括弧は辞書であること、辞書のキーにリストは使えないことの3つです。
このページは試験の学習用の整理です。公式の問題は転載せず、コードはすべて説明用に作った例です。
この記事の目次
公式情報の確認
試験日、料金、申込条件、試験方式など変動する情報は、公式情報を最終確認してください。 当サイトの一次情報確認日: 2026-09-18。
試験の出題範囲・実施要項は変動するため、受験前に公式情報を確認してください。
結論
- リストは変更できる並び、タプルは変更できない並び。タプルの要素には代入できない
- 集合は重複を持たず順序がない。空の集合は set() で作り、{} は空の辞書になる
- 辞書はキーで引く。存在しないキーを [] で引くと KeyError、get() なら None を返す
- 辞書のキーには変更できない型だけを使える。リストはキーにできない
- sort() は戻り値が None で元を並べ替え、sorted() は新しいリストを返す。pop() は値を返し、del は返さない
4つの型の違い
まず、見分ける軸を表にします。書き方の括弧が違うだけでなく、変更できるか、重複できるかが違います。
| 型 | 書き方 | 変更 | 順序 | 重複 | 主な使い道 |
|---|---|---|---|---|---|
| リスト | [1, 2, 3] | 変更できる | 順序あり | 重複できる | 要素を足したり消したりする並び |
| タプル | (1, 2, 3) | 変更できない | 順序あり | 重複できる | 変えない組(座標など) |
| 集合 | {1, 2, 3} | 要素の追加・削除はできる | 順序なし | 重複しない | 重複の除去・含まれるかの判定 |
| 辞書 | {'a': 1} | 変更できる | キーで引く | キーは一意 | 名前と値の対応 |
公式チュートリアルは、タプルは不変で通常は異なる型の要素が並び、リストは可変で要素は通常同じ型だと説明しています。集合は、重複する要素をもたない、順序づけられていない要素の集まりです。
リストとタプル:変更できるか
並べ替えの2つの書き方は取り違えやすい点です。リストの sort() は元のリストをその場で並べ替え、戻り値は None です。sorted() は新しいリストを返し、元のリストを変えません。タプルには sort() がなく、sorted() に渡すと並べ替えたリストが返ります。
| コード | 実行結果 | ひとこと |
|---|---|---|
a = [3, 1, 2]
print(a.sort(), a) | None [1, 2, 3] | sort() は元のリストを並べ替え、戻り値は None |
a = [3, 1, 2]
print(sorted(a), a) | [1, 2, 3] [3, 1, 2] | sorted() は新しいリストを返し、元は変わらない |
t = (1, 2, 3)
t[0] = 9 | TypeError: 'tuple' object does not support item assignment | タプルの要素には代入できない |
t = (1, 2, [3])
t[2].append(9)
print(t) | (1, 2, [3, 9]) | タプルの中のリストは変更できる |
print(a.sort()) と書くと None が表示される、という形は、選択肢で狙われやすい書き方です。また、公式チュートリアルによると、タプルにリストのような変更可能なオブジェクトを含めることはできます。変更できないのは、タプルが持つ要素そのものの差し替えです。
集合:重複が消える
公式チュートリアルは、集合の基本的な用途を、要素が含まれるかどうかの判定と、重複する要素の除去としています。集合は順序がないので、表示すると要素が予想と違う順序で現れることがあります。和・積・差・対称差の演算もできます。
| コード | 実行結果 | ひとこと |
|---|---|---|
{'apple', 'orange', 'apple', 'pear', 'orange', 'banana'} | 要素は4つ(重複が消える) | len() は 4 |
type({}) | <class 'dict'> | 空の波括弧は辞書 |
type(set()) | <class 'set'> | 空の集合は set() で作る |
空の波括弧 {} は集合ではなく空の辞書です。空の集合は set() で作ります。演算の例として、'abracadabra' と 'alacazam' の文字の集合では、積(両方にある文字)が a と c、差(前者にだけある文字)が b・d・r になります。
辞書:キーで引く
辞書は、キーと値のペアの集まりで、キーは辞書の中で一意です。数の並びで引くリストと違い、キーで引きます。存在しないキーを d[キー] で引くと KeyError になりますが、get() は例外を出さず、キーが無ければ None か指定した値を返します。
| コード | 実行結果 | ひとこと |
|---|---|---|
d = {'apple': 3, 'banana': 5}
d['grape'] | KeyError: 'grape' | 存在しないキーを [] で引くと例外 |
d.get('grape') | None | get() は例外にならず None を返す |
d.get('grape', 0) | 0 | 第2引数が、キーが無いときの値になる |
e = {}
e[(1, 2)] = 1 | {(1, 2): 1} | 数だけを含むタプルはキーにできる |
e = {}
e[[1, 2]] = 1 | TypeError: unhashable type: 'list' | リストはキーにできない |
e[(1, [2])] = 1 | TypeError: unhashable type: 'list' | リストを含むタプルもキーにできない |
公式チュートリアルは、キーは変更不能な型でなければならず、文字列と数値は常にキーにでき、タプルは文字列・数値・ほかのタプルだけを含むときにキーにできると述べています。リストは append() などでその場で変更できるため、キーにできません。
del・pop・removeの使い分け
リストから要素を消す3つの書き方は、何を指定するか、値を返すか、見つからないときにどうなるかが違います。
| 書き方 | 戻り値 | 注意 | 例 |
|---|---|---|---|
| l.pop() | 取り除いた値を返す | 空だと IndexError | [1, 2, 3] → 3 を返し [1, 2] |
| l.remove(9) | 返さない | 値が無いと ValueError | 値で探して最初の1つを消す |
| del l[1:3] | 返さない | 位置やスライスで指定 | [1, 2, 3, 4] → [1, 4] |
公式チュートリアルによると、del 文は pop() と違って値を返さず、スライスの削除や全要素の削除もできます。remove() は、値と等しい最初の要素を削除し、該当がなければ ValueError を出します。値を取り出して使いたいなら pop()、位置や範囲で消すなら del、値を指定して消すなら remove() です。
Python3エンジニア認定基礎試験の学習に使う書籍(Amazon)
試験範囲を通して読むときの1冊です。読んだ章は、このサイトの章別問題で確かめられます。
よくある質問
第5章のデータ構造は、何問出ますか?
このサイトが整理した公式の章別出題数では、40問中7問(17.5%)です。第4章の制御構造ツールの9問に次ぐ多さで、リスト・タプル・集合・辞書のどれが変更できるか、どんな例外が出るかが問われやすい章です。
タプルは完全に変更できないのですか?
タプル自体の要素の入れ替えはできませんが、公式チュートリアルによると、タプルにリストのような変更可能なオブジェクトを含めることはできます。上の例では、タプルの中のリストに append() で9を足せました。変更できないのは、タプルが持つ要素の参照先を差し替えることです。
辞書のキーに、リストを使えないのはなぜですか?
公式チュートリアルは、リストは append() や extend() などでその場で変更できるため、キーにできないと説明しています。キーには文字列・数値・タプルのような変更できない型を使います。リストを含むタプルも、同じ理由でキーにできません。
辞書に同じキーで2回代入すると、どうなりますか?
後から入れた値で置き換わります。公式チュートリアルは、すでに使われているキーで値を記憶すると、以前そのキーに結び付けられていた値は忘れ去られると述べています。キーは辞書の中で一意になります。
