Pythonを学んでいると、必ずと言っていいほど登場するのが「リスト内包表記(リストコンプリヘンション)」です。
「なんだか書き方が難しそう」「for文と何が違うの?」と感じている方も多いのではないでしょうか。
本記事では、Python初心者の方に向けて、リスト内包表記の基本的な書き方からfor文との違い、条件分岐(if)の使い方までを、サンプルコード付きで分かりやすく解説します。読み終わるころには、すっきりとしたコードが書けるようになっているはずです!
コンテンツ
リスト内包表記とは?
リスト内包表記とは、for文を使ったリストの作成を1行でシンプルに書くための記法です。英語では「list comprehension」と呼ばれます。
通常、複数の要素を持つリストを作るときはfor文で1つずつ追加していきますが、リスト内包表記を使うと同じ処理をより短く、読みやすく書くことができます。
基本的な書き方
リスト内包表記の基本構文は次のとおりです。
[式 for 変数 in イテラブル]たとえば「0から9までの数字を2乗したリスト」を作ってみましょう。
squares = [i ** 2 for i in range(10)]
print(squares)
# 実行結果
# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]たった1行で、2乗した値のリストを作成できました。
for文との違いを比較してみよう
同じ処理を通常のfor文で書くと、次のようになります。
squares = []
for i in range(10):
squares.append(i ** 2)
print(squares)こちらは空のリストを用意し、for文の中でappend()を使って1つずつ追加しています。間違ってはいませんが、3行必要です。
リスト内包表記を使えば1行で書けるため、コードが短くなり、可読性が上がるのが大きなメリットです。また、一般的にfor文でappend()を繰り返すよりも処理速度が速くなる傾向があります。
if文(条件分岐)と組み合わせる
条件に合う要素だけを取り出す
末尾にif文を付けると、条件に合う要素だけを抽出できます。
[式 for 変数 in イテラブル if 条件]「0から9までのうち、偶数だけを集めたリスト」は次のように書けます。
evens = [i for i in range(10) if i % 2 == 0]
print(evens)
# 実行結果
# [0, 2, 4, 6, 8]条件によって値を変える(三項演算子)
「偶数なら偶数、奇数なら奇数」のように値そのものを変えたい場合は、三項演算子を式の部分に書きます。ifを書く位置が変わる点に注意しましょう。
labels = ["偶数" if i % 2 == 0 else "奇数" for i in range(5)]
print(labels)
# 実行結果
# ['偶数', '奇数', '偶数', '奇数', '偶数']抽出のためのifはfor文の後ろ、値を変えるためのif〜elseはforの前(式の部分)に書く、と覚えておきましょう。
ネスト(多重ループ)も書ける
for文を2つ並べることで、二重ループも表現できます。
pairs = [(x, y) for x in range(2) for y in range(2)]
print(pairs)
# 実行結果
# [(0, 0), (0, 1), (1, 0), (1, 1)]左側のforが外側のループ、右側のforが内側のループに対応します。ただし、ネストが深くなると逆に読みにくくなるため、2重程度にとどめておくのがおすすめです。
リスト内包表記を使うときの注意点
- 処理が複雑になりすぎる場合は、無理に1行にせず通常のfor文を使う方が読みやすくなります。
- 1行に詰め込みすぎると、後から読み返したときに理解しづらくなります。
- 「短く書くこと」よりも「分かりやすく書くこと」を優先しましょう。
シンプルな処理ではリスト内包表記、複雑な処理では通常のfor文、と使い分けるのがコツです。
もっと効率的にPythonを学びたい人へ
リスト内包表記のような「Pythonらしい書き方」は、独学だけだとなかなか身につきにくい部分でもあります。
「独学では続かない」「現役エンジニアに質問しながら効率よく学びたい」という方は、プログラミングスクールの無料カウンセリングを活用してみるのもおすすめです。下記はマンツーマン指導で、未経験からのPython習得や転職をサポートしてくれるスクールです。まずは無料カウンセリングで雰囲気を確かめたいという方にも向いています。
※本記事には広告(アフィリエイトリンク)を含みます。
Pythonプログラミング|マンツーマンレッスンで初めてをプロに育てる【Python Winner】![]()
まとめ
今回は、Pythonのリスト内包表記について解説しました。最後にポイントをおさらいしましょう。
- リスト内包表記は
[式 for 変数 in イテラブル]でリストを1行で作れる記法 - for文より短く、読みやすく、処理も速くなりやすい
- 抽出のifはforの後ろ、値を変えるif〜elseはforの前に書く
- forを並べれば多重ループも書けるが、複雑になりすぎないよう注意
リスト内包表記を使いこなせると、コードが一気にPythonらしくなります。ぜひ実際に手を動かして試してみてください!
ほかにも知りたいことやご意見等があれば、お気軽にコメントやお問い合わせからご連絡ください。
ナノトイラボ 
