やっほー!国内のAI狂いだよ!✨
第13回へようこそ!今回は、Python使いの必殺技「リスト内包表記(リストコンプリヘンション)」を伝授するよ。
名前は難しそうだけど、要するに「3行かかるコードを1行で書く魔法」のこと。
これを覚えると、コードが驚くほどスッキリして「私、Python極めてるわ〜」って気分になれるから、絶対にマスターしよう!🧙♀️💫
公式の「ここがわかりにくい」:簡潔な手段って?
公式ドキュメントには、こんな風に書かれているよ。
リスト内包表記 (list comprehension) は、リストを生成するための簡潔な手段を提供しています。
「簡潔な手段」って言われてもピンと来ないよね。
具体的に言うと、今まで「空のリストを作って、for文で回して、appendで追加する」って書いてた処理を、「[ ] の中に全部詰め込む」書き方のことなんだ。
百聞は一見に如かず、コードで見比べてみよう!
1. 魔法のビフォー・アフター
例えば、「0から9までの数字を2乗したリスト」を作りたいとするね。
【Before】今までの書き方(3行)
squares = [] # 空の箱を用意
for x in range(10): # ループして
squares.append(x**2) # appendで追加
【After】リスト内包表記(1行!)
squares = [x**2 for x in range(10)]
すごくない!?たった1行で終わっちゃった!✨
構文はこうなっているよ👇
[ 式 for 変数 in イテラブル ]
「for 以降で取り出した変数を、先頭の式で加工して、リストに入れる」って読むと分かりやすいよ。
🐍 サンプルコードを見る(クリックで開閉)
# 数字を2倍にする
doubles = [x * 2 for x in range(5)]
print(doubles)
# -> [0, 2, 4, 6, 8]
# 文字列を大文字にする
fruits = ["apple", "banana", "cherry"]
upper_fruits = [f.upper() for f in fruits]
print(upper_fruits)
# -> ['APPLE', 'BANANA', 'CHERRY']
[0, 2, 4, 6, 8]
[‘APPLE’, ‘BANANA’, ‘CHERRY’]
2. if文を追加してフィルタリング!
「偶数だけリストに入れたい」みたいに条件をつけたい時もあるよね。
そんな時は、後ろに if をくっつけるだけでOK!
[ 式 for 変数 in イテラブル if 条件 ]
🐍 サンプルコードを見る(クリックで開閉)
# 0〜9のうち、偶数だけを2乗する
# 「もし x % 2 == 0 なら、x**2 をリストに入れる」
even_squares = [x**2 for x in range(10) if x % 2 == 0]
print(even_squares)
[0, 4, 16, 36, 64]
この if は「フィルタリング(選別)」の役割をするよ。
条件に合わないものは、リストに追加されずに捨てられるんだ。
3. 【試験の罠】ifの位置が変わる!?
ここが一番のひっかけポイント!🚨
「偶数ならそのまま、奇数なら0を入れる」みたいに、条件によって値を変えたい(elseが必要な)場合はどうする?
この場合は、「三項演算子(条件式)」を使うから、if の位置が先頭(forの前)に来るんだ!
- 選別(〜の時だけ追加):
[x for x in data if 条件](後ろ) - 分岐(〜ならA、違えばB):
[A if 条件 else B for x in data](前)
🐍 比較実験コード(クリックで開閉)
numbers = [1, 2, 3, 4, 5]
# パターンA:偶数だけ選ぶ(奇数は消える)
evens = [x for x in numbers if x % 2 == 0]
print(f"選別: {evens}")
# パターンB:偶数はそのまま、奇数は "奇数" という文字にする
converted = [x if x % 2 == 0 else "奇数" for x in numbers]
print(f"分岐: {converted}")
選別: [2, 4]
分岐: [‘奇数’, 2, ‘奇数’, 4, ‘奇数’]
試験に出る!要注意ポイント
今回の範囲で、Python 3 エンジニア認定基礎試験によく出るポイントをまとめたよ!📝
① ネストした内包表記
リスト内包表記は入れ子(ネスト)にすることもできるよ。
例えば「2次元配列を1次元に平坦化する」ときなんかに使われるけど、読みづらくなるから複雑なものは推奨されないよ。
matrix = [[1, 2], [3, 4]]
flat = [num for row in matrix for num in row]
# -> [1, 2, 3, 4]
# 「for row in matrix」のあとに「for num in row」が続くイメージ
② 読みやすさ重視
内包表記は便利だけど、やりすぎると「魔術書」みたいに解読不能になるよ。
Pythonの哲学(Zen of Python)には「Readability counts(可読性は重要)」という言葉がある通り、無理に1行にせず、素直に for 文を書いたほうがいい場合もあることを覚えておいてね。
「俺カッコイイ!」と思って3重ループの内包表記を書いたら、翌日の自分ですら「何これ…?」って理解できなかったことがあるよ😱
1行で書けるからって、調子に乗って複雑にしすぎるのはNG!「未来の自分が読めるか」を常に意識しようね。
理解度チェック!ミニクイズ
リスト内包表記、使いこなせそう?
試験レベルの問題でチェックしてみよう!🔍
次の内包表記の実行結果は?
[x * 2 for x in range(3)]
▼ クリックで正解を表示
[0, 2, 4]
解説:
range(3) は 0, 1, 2。
それぞれを2倍にするから、0, 2, 4 のリストができるよ。
「リスト a から正の数だけを取り出したリスト」を作る正しいコードは?
▼ クリックで正解を表示
a から正の数だけを取り出したリスト」を作る正しいコードは?[x for x in a if x > 0]
解説:
フィルタリング(選別)の場合は、for の後ろに if を書くよ。
2番のような書き方は SyntaxError になるから注意!(else がない三項演算子は書けないため)
次のコードの実行結果は?
["〇" if i % 2 == 0 else "×" for i in range(3)]
▼ クリックで正解を表示
['〇', '×', '〇']
解説:
i は 0, 1, 2。
0は偶数(〇)、1は奇数(×)、2は偶数(〇) となるよ。
これは三項演算子を使っているから if-else が for の前に来てるね!
まとめ:次回への引き
今回は「リスト内包表記」について解説したよ!
最初は見慣れないかもしれないけど、慣れると手放せなくなる最高の相棒になるはず✨
次回は、リストと並ぶ重要なデータ構造!
テーマは「変更できないリスト!?タプルの世界」だよ。
「書き換えられない(イミュータブル)」という不便そうな性質が、実はプログラムの安全性を守る鍵だった!?
複数の値を一気に受け渡すテクニックと一緒に紹介するからお楽しみに!👋✨
出典: Python公式チュートリアル
Copyright © 2001-2026 Python Software Foundation. Licensed under the PSF License.






