Python リスト内包表記とは?書き方・使い方を初心者向けに解説

Pythonのリスト内包表記は、リストを効率よく作成するための書き方です。
通常のfor文を使った処理を、より短くシンプルに記述できます。
この記事では、Python初心者向けにリスト内包表記の基本から、ifを使った条件指定、通常のfor文との違いまでわかりやすく解説します。
Pythonのリスト内包表記とは
リスト内包表記(List Comprehension)とは、リストを作成する処理を1行で記述するための書き方です。
例えば、0から4までの数字をリストにする場合、通常のfor文では次のように書きます。
numbers = []
for i in range(5):
numbers.append(i)
print(numbers)
実行結果:
[0, 1, 2, 3, 4]
これをリスト内包表記で書くと、次のようになります。
numbers = [i for i in range(5)]
print(numbers)
実行結果は同じです。
[0, 1, 2, 3, 4]
リスト内包表記を使うことで、リストを作成する処理を短く書けます。
Pythonのリスト内包表記の基本構文
リスト内包表記の基本的な構文は次のとおりです。
[式 for 変数 in 繰り返し可能なオブジェクト]
例えば、次のコードがあります。
numbers = [i for i in range(5)]
それぞれの部分には、次の意味があります。
| 部分 | 意味 |
|---|---|
i |
リストに入れる値 |
for i |
iを順番に取り出す |
in range(5) |
0~4を繰り返す |
「何をリストに入れるのか」を最初に書き、その後ろにfor文を書くと考えると理解しやすいでしょう。
リスト内包表記で計算する
リスト内包表記では、取り出した値を計算してからリストに入れることもできます。
例えば、0~4をそれぞれ2倍してみます。
numbers = [i * 2 for i in range(5)]
print(numbers)
実行結果:
[0, 2, 4, 6, 8]
通常のfor文なら次のようになります。
numbers = []
for i in range(5):
numbers.append(i * 2)
リスト内包表記では、i * 2をそのままリストに入れる値として指定できます。
リスト内包表記で文字列を処理する
リスト内包表記は、文字列の処理にも利用できます。
例えば、文字列のリストをすべて大文字に変換します。
words = ["apple", "banana", "orange"]
result = [word.upper() for word in words]
print(result)
実行結果:
['APPLE', 'BANANA', 'ORANGE']
このように、リストの各要素に対して同じ処理を行いたい場合に便利です。
リスト内包表記でif条件を使う
リスト内包表記では、ifを使って条件に合う要素だけを取り出すこともできます。
基本構文は次のとおりです。
[式 for 変数 in リスト if 条件]
例えば、1~10の中から偶数だけを取り出します。
numbers = [i for i in range(1, 11) if i % 2 == 0]
print(numbers)
実行結果:
[2, 4, 6, 8, 10]
i % 2 == 0は、「iを2で割った余りが0」という意味です。
つまり、偶数だけをリストに追加しています。
リスト内包表記で奇数を取り出す
奇数だけを取り出すこともできます。
numbers = [i for i in range(1, 11) if i % 2 == 1]
print(numbers)
実行結果:
[1, 3, 5, 7, 9]
このように、ifを組み合わせることで、条件に合ったデータだけを新しいリストにできます。
リスト内包表記でif elseを使う
条件によってリストに入れる値を変えることもできます。
この場合は、ifとelseを式の中に書きます。
[値1 if 条件 else 値2 for 変数 in リスト]
例えば、数字が偶数なら「偶数」、奇数なら「奇数」という文字列にします。
numbers = [1, 2, 3, 4, 5]
result = ["偶数" if i % 2 == 0 else "奇数" for i in numbers]
print(result)
実行結果:
['奇数', '偶数', '奇数', '偶数', '奇数']
通常のfor文とリスト内包表記の違い
例えば、1~5の数字を2倍する処理を比較してみましょう。
通常のfor文:
numbers = []
for i in range(1, 6):
numbers.append(i * 2)
リスト内包表記:
numbers = [i * 2 for i in range(1, 6)]
リスト内包表記のほうが短く書けます。
ただし、短ければ必ず良いというわけではありません。
処理が複雑になる場合は、通常のfor文を使ったほうが読みやすいこともあります。
ネストしたfor文もリスト内包表記にできる
リスト内包表記では、複数のforを組み合わせることもできます。
例えば、次のような二重ループがあります。
result = []
for x in [1, 2, 3]:
for y in [10, 20]:
result.append(x + y)
print(result)
実行結果:
[11, 21, 12, 22, 13, 23]
これをリスト内包表記にすると次のようになります。
result = [x + y for x in [1, 2, 3] for y in [10, 20]]
print(result)
ただし、forが増えるほどコードが読みにくくなる場合があります。
初心者のうちは、まず1つのforを使ったリスト内包表記を理解することをおすすめします。
リスト内包表記を使うときの注意点
リスト内包表記は便利ですが、何でもリスト内包表記にすればよいわけではありません。
例えば、複雑な処理を無理に1行にすると、かえってコードが読みにくくなります。
次のようなコードは、通常のfor文や関数に分けたほうが理解しやすい場合があります。
result = [x * 2 if x > 10 else x + 5 if x > 5 else x for x in numbers]
「短く書くこと」より「読みやすく書くこと」を優先しましょう。
リスト内包表記とmap関数の違い
リストの各要素に同じ処理を行う場合、map()を使う方法もあります。
例えば、数字を2倍にします。
numbers = [1, 2, 3, 4, 5]
result = list(map(lambda x: x * 2, numbers))
リスト内包表記なら次のように書けます。
result = [x * 2 for x in numbers]
Pythonでは、単純なデータ変換であればリスト内包表記のほうが読みやすいケースもあります。
リスト内包表記の覚え方
初心者は、次の形をまず覚えるとよいでしょう。
[処理する値 for 変数 in リスト]
例えば、
[x * 2 for x in numbers]
なら、
「numbersからxを1つずつ取り出して、x × 2をリストにする」
と考えます。
条件を付ける場合は、
[処理する値 for 変数 in リスト if 条件]
です。
例えば、
[x * 2 for x in numbers if x > 10]
なら、
「numbersからxを取り出し、xが10より大きい場合だけx×2をリストにする」
という意味です。
関連記事
近いテーマの記事です。あわせてどうぞ。
Pythonのリスト内包表記まとめ
Pythonのリスト内包表記は、for文を使ったリスト作成処理を簡潔に記述できる便利な構文です。
基本形は次のとおりです。
[式 for 変数 in リスト]
条件を付ける場合は、
[式 for 変数 in リスト if 条件]
と書きます。
リスト内包表記を使うことで、リストの各要素を変換したり、条件に合う要素だけを抽出したりできます。
ただし、複雑な処理を無理に1行にまとめると、かえって読みにくくなります。
「短く書けるか」だけでなく「他の人が読んで理解できるか」を意識して使うことが大切です。
Pythonを実際に書いて覚える
リスト内包表記は、構文を暗記するだけではなかなか身につきません。
実際に、
[x * 2 for x in range(10)]
のような短いコードを書いて実行し、
- どの値がリストに入るのか
forはどの順番で動いているのか
を確認していくと理解しやすくなります。
Pythonでは、コードを書いて実行し、結果を確認する練習を繰り返すことが重要です。
Pythonの関数・メソッドの全体像はPython基本関数・メソッド完全一覧にまとめています。





