【初心者向け】Python リスト内包表記とは?わかりやすく解説!

このサイトは、Pythonや生成AIなどを学べるオンラインプログラミングスクール AI Academy Bootcampが運営しています。

リスト内包表記とは

リスト内包表記(List Comprehensions)とは、既存のリストから新しいリストを作ることができる、リスト作成方法の一つです。

例えば、1から10までの数値をそれぞれ2乗した数値のリストを作る場合、リスト内包表記で記述すると以下のように簡潔に記述できます。

result = [x**2 for x in range(1,11)]
print(result) # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

# 通常のループでは次のようになります。
result = []
for i in range(1,11):
    result.append(i**2)

print(result) # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

出力結果


[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

リスト内包表記の書き方の場合は以下になり、

result = [x**2 for x in range(1,11)]

リスト内包表記を用いず、通常のfor文のみを用いた場合は以下のようになります。

result = []
for i in range(1,11):
    result.append(i**2)

print(result) # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

見比べて頂くと分かる通り、出力結果はどちらも同じですが、リスト内包表記を用いた方法のプログラムの方が、簡潔で読みやすいです。
リスト内包表記は、既存のリストから取り出した要素に対し処理をするだけでなく、条件に応じた場合にだけ新しいリストに追加したい場合にも使えます。

リスト内包表記のメリットは、処理を簡潔に書け、新しいリストなどへの追加メソッドの呼び出しにかかるコストを軽減できます。

リスト内包表記の文法を理解しよう

ここまで登場したリスト内包表記ですが、リスト内包表記の文法上、必ず「for」の記載は必要になります。

[式 for 任意の変数名 in range()など]

「if」の記載は必要に応じてあわせて利用します。リスト内包表記に「if」を用いたサンプルプログラムは以下のようになります。

print([i+2 for i in range(1,6) if i%2])

出力結果

[3, 5, 7]

上記のリスト内包表記のコード(print([i+2 for i in range(1,6) if i%2]))に関して補足します。

ifの条件としては、 i%2(余り) が 1(すなわち、True)の場合、リストに格納するリスト内包表記です。

if i%2のように、数値で条件を指定する場合は、ゼロを表す数値や、空の文字列やリストなどは偽(False)とみなされ、それ以外はすべて真(True)とみなされます。

今回の場合ですと、2で割り切れる数値、例えば、i=2のときは、i%22%2となり、この答えは0なので、Falseとなります。一方で、i=3のときは、i%23%2となり、この答えは1なのでTrueとなります。

おわりに

この記事では、リスト内包表記に関して学びました。リスト内包表記以外にもセット(set)と辞書(dict)を生成する内包表記もあります。

🎁ちょっとひと息 ! 業務や学習に役立つライブラリーをプレゼント !

オンラインプログラミングスクールのAI Academy Bootcamp LINE公式のライブラリーでは無料動画、講座、最新技術資料など、学習や業務に役立つ秀逸な教材や実践的なリソースを豊富に取り揃えています!毎週新しいコンテンツも更新中です。LINE友だち登録でプレゼントします。ぜひご活用ください!

LINE Libraryで人気 の動画です。

倍速で学ぶ!生成AIを活用したプログラミング勉強法】 生成AIを活用して効率的にプログラミングを学ぶ方法を解説しています。生成AIの基本的な仕組みや効果的な活用法、注意点についても詳しく説明。勉強法とともに生成AIそのものについても学べる内容となっています。ぜひご覧ください!

AI Academy Bootcamp ではAI・データサイエンス、機械学習の実践力を高める全4コース40時間以上の動画が見放題!AIの学習に必須のPythonの学習から始まり、データサイエンス・機械学習など、目的に応じた幅広い分野をカバーしています。