リスト内包表記とは
リスト内包表記(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%2
は2%2
となり、この答えは0
なので、False
となります。一方で、i=3
のときは、i%2
は3%2
となり、この答えは1なのでTrue
となります。
おわりに
この記事では、リスト内包表記に関して学びました。リスト内包表記以外にもセット(set)と辞書(dict)を生成する内包表記もあります。気になった方はAI Academy Bootcampをご活用ください。効率よくPythonを身に付けることができます。
Pythonを効率よく学ぶには?
Pythonの基本文法やデータ分析の基礎/統計学基礎などが、AI Academyに無料アカウント登録することで無料で学べます。
AI Academy Bootcampの公式LINEもご紹介します。友だち登録してくださった方に無料講義や無料動画のご案内、さらに学びたい方には受講割引クーポンのプレゼントもございます。
無料で学ぶチャンスです!
AI Academy Bootcampでは、現役のデータサイエンティストや機械学習エンジニアに、受講中いつでも、無制限で質問できます。動画+テキストのコンテンツ:500本以上で基礎~応用まで学べる動画見放題プランは35,000円(税込 6ヶ月間)。オンラインで好きな時間に勉強できます。無理のない学習スケジュールもご紹介しています。ぜひご検討ください。