用語比較
リスト内包表記とfor文の使い分け
リスト内包表記は、リストを生成する簡潔な手段です。for文でappendを繰り返して作るリストと同じ結果を、1つの式で書けます。公式チュートリアル5.1.3は、平方のリストを作る例で両方の書き方を示しています。
Python 3 エンジニア認定基礎試験では、内包表記をfor文に書き直して結果を読み取る問題が出題の型になります。式・for句・if句の順に読み、for句とif句がどの順で入れ子になるかを確かめれば、結果を取り違えません。
このページでは、同じ処理を両方で書いたコード、読み取りの手順、使い分けの目安を整理します。リスト・集合・辞書の違いは、別のページで扱います。
この記事の目次
この記事の根拠と出典
各セクションの見出しの下に、公式資料で確認した内容か編集部の整理かをラベルで示しています。 試験日・料金・申込条件・試験方式は変わることがあるため、申込前に公式サイトで確認してください。Python3エンジニア認定基礎試験の一次情報確認日: 2026-09-18。
結論
リスト内包表記
括弧の中に、式、for句、0個以上のforまたはif句を書いて新しいリストを作る。結果は、for句とif句の中で式を評価した値からなるリスト。
for文でappend
空のリストを用意し、forループの中でappendして要素を足していく。ループの後にもループ変数が残る。
違いを表で確認
| 比較軸 | リスト内包表記 | for文でappend |
|---|---|---|
| 書き方(平方のリスト) | squares = [x**2 for x in range(10)] | squares = [] for x in range(10): squares.append(x**2) |
| ループ変数のその後 | 公式チュートリアルは、いかなる副作用もなく計算できる書き方として示す | ループが終了した後にもxという変数が残る(作られるか上書きされる) |
| 簡潔さ | 1つの式で書け、公式チュートリアルは「より簡潔で読みやすい」とする | 初期化・ループ・appendの3段階を書く |
| 条件の書き方 | 末尾にif句を足す(例: ... for x in ... if x != y) | forの中にif文を入れ子にする |
| 試験で探す語 | 式、for句、if句、角括弧 | append、空のリスト、インデント |
Python3エンジニア認定基礎試験の学習に使う書籍(Amazon)
試験範囲を通して読むときの1冊です。読んだ章は、このサイトの章別問題で確かめられます。
どこで迷っているかを切り分ける
内包表記を読むときに、左から順に実行すると思っている人
リスト内包表記は、先頭の式から読むと流れが分かりにくくなります。for句とif句を先に読み、その中で式を評価した結果が要素になる、と順序を入れ替えて読みます。
for句が2つあると順序が分からなくなる人
公式チュートリアルは、for句が2つ並ぶ内包表記が、同じ順に書いたforの入れ子と等価だと示します。左のfor句が外側、右のfor句が内側のループです。for文に書き直してから結果を数えると確実です。
ループ変数が残ることを意識していない人
for文で作ったリストの後で、ループ変数のxを参照する問題があります。公式チュートリアルは、for文での作り方ではxが残る(作られるか上書きされる)と注意しています。参照先の変数名が、ループで上書きされていないかを確かめます。
具体例で使い分ける
例 1
squares = [x**2 for x in range(10)] の結果を問われる場合
内包表記で作られるリストの中身を答えます。
- for句は、range(10)の0から9の整数を1つずつxに入れます。
- 式のx**2を各xで評価した値が、順に要素になります。
- for文でappendしたリストと同じ結果で、公式チュートリアルでは[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]です。
結論: for句で値を取り出し、式を評価して集める、の順で読みます。
例 2
[(x, y) for x in [1, 2, 3] for y in [3, 1, 4] if x != y] の結果を問われる場合
for句が2つとif句が1つ付いた内包表記を読み取ります。
- 公式チュートリアルは、これを、xのforの内側にyのfor、さらにその内側にif x != yを入れたforとifのコードと等価だと示します。
- xが1のとき、yが3、1、4と進み、x != yを満たす(1, 3)と(1, 4)が入ります。
- xが2、3も同様に進み、公式チュートリアルでは[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]です。
結論: for句は左から外側、if句は最も内側で判定されるものとして、書き直して数えます。
例 3
[[row[i] for row in matrix] for i in range(4)] の結果を問われる場合
3行4列の行列の内包表記を読み取ります。
- matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]のとき、内側の内包表記が、各行のi番目の要素を集めます。
- 外側がiを0から3まで動かすので、行と列が入れ替わります。
- 公式チュートリアルでは[[1,5,9],[2,6,10],[3,7,11],[4,8,12]]になり、同じ処理をlist(zip(*matrix))でも行えます。
結論: ネストしたときは、外側の内包表記の要素数(ここではiの4通り)が、結果のリストの要素数になります。
問題文から答えを選ぶ手順
- 1
角括弧と中身の構成を確認する
角括弧の中に、式と、for句、0個以上のforまたはif句が並んでいれば、リスト内包表記です。
- 2
for句とif句を左から並べる
先頭の式は後回しにし、for句とif句を左から入れ子の順に並べます。
- 3
for文に書き直す
空のリストを用意し、並べた順にfor文とif文を入れ子にして、最も内側でappendします。
- 4
結果を数える
書き直したコードを上から実行し、appendされる順に要素を書き出します。
試験での見分け方
- 1リスト内包表記は、for句とif句の中で式を評価した結果からなる新しいリストを作る。
- 2for句が複数あるときは、左のfor句が外側、右が内側のループ。
- 3if句は、その位置までのfor句の値に対する条件になる。
- 4for文でappendして作る場合、ループ変数はループの後にも残る。
- 5複雑な流れの式になるなら、公式チュートリアルが述べるように組み込み関数(例: zip)を検討する。
誤答しやすい選択肢
リスト内包表記の結果が、リストではなくタプルやジェネレータになると思う
修正: 角括弧で囲んだ内包表記の結果は、新しいリストです。丸括弧で囲むとジェネレータ式になり、別の仕組みです。
for句が2つあるとき、右のfor句が外側だと思う
修正: 左のfor句が外側、右のfor句が内側です。公式チュートリアルの(x, y)の例では、xが外側、yが内側で、(1, 3)、(1, 4)、(2, 3)の順に並びます。
式がタプルのとき、丸括弧を省略できると思う
修正: 公式チュートリアルは、式がタプルのときは丸括弧が必要だと述べます。[(x, y) for ...]のように書きます。
for文で作ったリストの後で、ループ変数は消えると思う
修正: 公式チュートリアルは、for文での作り方ではループが終わった後もxが存在し、作られるか上書きされると注意しています。
確認問題
Q1[x**2 for x in range(10)] で作られるリストの最後の要素はいくつですか?
答え: 81
range(10)は0から9で、最後の9の平方は81です。公式チュートリアルの結果は[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]です。
Q2リスト内包表記でfor句が2つ並ぶとき、外側のループになるのは左右どちらですか?
答え: 左のfor句
公式チュートリアルの[(x, y) for x in ... for y in ... if x != y]は、xのforの内側にyのforを入れたコードと等価です。
Q3リスト内包表記を書くとき、式がタプルなら必要になるものは何ですか?
答え: 丸括弧
公式チュートリアルは、式がタプルのときは丸括弧が必要だと述べ、[(x, y) for x in [1, 2, 3] for y in [3, 1, 4] if x != y]の例を示します。
到達チェック
- リスト内包表記の構成(式、for句、if句)を言える
- 同じ処理をfor文のappendに書き直せる
- for句が複数あるときの外側と内側を判定できる
- 式がタプルのとき丸括弧が必要だと説明できる
- for文でループ変数が残ることを説明できる
関連ページで確認する
同じ資格で次に知りたいこと
- 内包表記のifの位置の違い|末尾のif句(絞り込み)と先頭のif-else(値の切り替え)
リスト内包表記の末尾にif句を置く書き方と、先頭にif-elseの条件式を置く書き方の違いを、要素数が変わるかどうか、elseを書けるかどうかから解説。Python 3 エンジニア認定基礎試験での読み取り手順と確認問題つきです。
- ミュータブルとイミュータブルの違い|リスト・タプル・文字列の変更と代入をPython3エンジニア認定基礎試験で判断する
ミュータブル(変更できる)とイミュータブル(変更できない)の違いを、リスト・タプル・文字列の公式チュートリアルの記述、代入で参照が共有される動き、スライスによる浅いコピー、確認問題つきで整理します。
- 例外処理の try/except と if による事前確認の違い
Pythonの try/except(例外処理)と if による事前確認の違いを、処理の流れ、書き方の名前(EAFPとLBYL)、競合状態の注意点、Python3基礎試験での判断手順と確認問題まで解説します。
よくある質問
Qリスト内包表記とfor文は、結果が同じですか?
同じ処理を書けます。公式チュートリアルでも、平方のリストを両方で作る例が示され、内包表記の方がより簡潔で読みやすいとされています。
Qリスト内包表記は何で構成されますか?
角括弧の中に、まず式を置き、続けてfor句を1つ、その後ろに0個以上のfor句またはif句を並べて作ります。
Q内包表記とfor文で、ループ変数の扱いは違いますか?
公式チュートリアルは、for文で作るとループ終了後もxが残る(作られるか上書きされる)と注意し、内包表記はいかなる副作用もなく計算できる書き方として示します。
Qリストの転置も内包表記で書けますか?
書けます。公式チュートリアルは[[row[i] for row in matrix] for i in range(4)]という例を示したうえで、複雑な式を書くより組み込み関数のlist(zip(*matrix))を使う方がよいと説明しています。
次に見る比較
- G検定・DS検定・統計検定2級で重なる用語10語の比較
同じ名前の用語の定義と収録章を、資格ごとに並べます。
- ベイズの定理と条件付き確率の違い(統計検定2級の式と計算例)
求める確率の向きの違いと、陽性になる確率の計算例を確かめます。
- 紛らわしい用語ペア早見表
混同しやすい用語の違いと判定の手掛かりを、資格別の一覧で確かめます。
執筆: ミナト編集部(運営者情報を見る)
