for文内包表記を日本一わかりやすく解説!初心者でも5分でマスター
内包表記とは?一言で説明
内包表記(リスト内包表記)とは、1行でリストを作る魔法のような書き方です。forループを使って書いていたコードを、たった1行にまとめることができます。
なぜ内包表記を使うのか?
メリット
- コードが短くなる:5行が1行になることも
- 読みやすい:慣れれば一目で理解できる
- 実行速度が速い:通常のforループより高速
- Pythonらしい:プロのPythonプログラマーが使う書き方
基本的な内包表記の書き方
基本構文
[式 for 変数 in イテラブル]
実例で理解しよう
従来の書き方(5行)
numbers = []
for i in range(5):
numbers.append(i * 2)
print(numbers) # [0, 2, 4, 6, 8]
内包表記(1行)
numbers = [i * 2 for i in range(5)]
print(numbers) # [0, 2, 4, 6, 8]
条件付き内包表記
条件を加えて、特定の要素だけを取り出すことができます。
基本構文
[式 for 変数 in イテラブル if 条件]
実例:偶数だけを取得
# 0から9までの偶数だけを取得
evens = [x for x in range(10) if x % 2 == 0]
print(evens) # [0, 2, 4, 6, 8]
実例:文字列の処理
# 長さが4文字以上の単語だけを取得
words = ['cat', 'dog', 'elephant', 'bird']
long_words = [word for word in words if len(word) >= 4]
print(long_words) # ['elephant', 'bird']
辞書内包表記
リストだけでなく、辞書も内包表記で作れます。
基本構文
{キー: 値 for 変数 in イテラブル}
実例:数値とその2乗の辞書
squares = {x: x**2 for x in range(5)}
print(squares) # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
セット内包表記
重複を自動で除去するセットも内包表記で作成できます。
基本構文
{式 for 変数 in イテラブル}
実例:重複を除去
numbers = [1, 2, 2, 3, 3, 4]
unique = {x for x in numbers}
print(unique) # {1, 2, 3, 4}
ネストした内包表記
内包表記の中に内包表記を書くこともできます。
実例:2次元リストの作成
matrix = [[i+j for i in range(3)] for j in range(3)]
print(matrix) # [[0, 1, 2], [1, 2, 3], [2, 3, 4]]
実践的な使用例
CSVデータの処理
# 文字列の数値リストを整数に変換
str_numbers = ['1', '2', '3', '4', '5']
int_numbers = [int(x) for x in str_numbers]
print(int_numbers) # [1, 2, 3, 4, 5]
複数条件の組み合わせ
# 10以上50以下の数値から、3の倍数を取得
result = [x for x in range(10, 51) if x % 3 == 0]
print(result) # [12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48]
文字列操作
# 文字列リストを大文字に変換(空文字列は除外)
words = ['hello', '', 'world', '', 'python']
upper_words = [word.upper() for word in words if word]
print(upper_words) # ['HELLO', 'WORLD', 'PYTHON']
よくある間違いと注意点
1. 複雑すぎる内包表記は避ける
# 悪い例:読みにくい
result = [x*2 for x in [y for y in range(10) if y%2==0] if x>4]
# 良い例:段階的に処理
evens = [y for y in range(10) if y % 2 == 0]
result = [x * 2 for x in evens if x > 4]
2. メモリ使用量に注意
大量のデータを扱う時は、ジェネレータ式を使用しましょう。
# リスト内包表記(メモリを多く使う)
squares_list = [x**2 for x in range(1000000)]
# ジェネレータ式(メモリ効率が良い)
squares_gen = (x**2 for x in range(1000000))
まとめ
内包表記は最初は難しく感じるかもしれませんが、慣れると非常に便利な機能です。以下のポイントを覚えておきましょう:
- 基本形:
[式 for 変数 in イテラブル] - 条件付き:
[式 for 変数 in イテラブル if 条件] - 辞書:
{キー: 値 for 変数 in イテラブル} - セット:
{式 for 変数 in イテラブル}
まずは簡単な例から始めて、徐々に複雑な処理にチャレンジしてみてください。内包表記をマスターすれば、あなたのPythonコードはより洗練されたものになります!
練習問題
- 1から10までの数値の中で、5で割り切れる数のリストを作成してください
- 文字列リスト
['apple', 'banana', 'cherry']の各要素の文字数を辞書で表現してください - 1から20までの数値の中で、素数のセットを作成してください
これらの問題にチャレンジして、内包表記をマスターしましょう!
■プロンプトだけでオリジナルアプリを開発・公開してみた!!
■AI時代の第一歩!「AI駆動開発コース」はじめました!
テックジム東京本校で先行開始。
■テックジム東京本校
「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。
<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。
<月1開催>放送作家による映像ディレクター養成講座
<オンライン無料>ゼロから始めるPython爆速講座
