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

リスト内包表記とは

リスト内包表記(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などをご活用し、効率よくPythonを

身に付けてみてください。

Pythonを効率よく学ぶには?

Pythonの基本文法やデータ分析の基礎や統計学基礎などは無料アカウント登録することで、利用可能です。

もしくは、データサイエンティストや機械学習エンジニアに質問し放題かつ、体系的に学べる動画コンテンツでデータ分析技術を学びたい方は、オンラインで好きな時間に勉強できるAI Academy Bootcampがオススメです。