Pythonのリストを「新リスト=[ 変数 for文]」と書く内包表記法について

Pythonのリスト作成時に、for文を使う内包表記法について

今回はPythonでリスト(list)オブジェクトを新しく作る時に役立つ、ちょっと特殊(?)な書き方の説明です。それは、たとえば次のような書き方です。

newlist=[c for c in range(a-b)]



新しいリストをつくるとき、その要素の中を「変数 for文」で表現する書き方のことです。内包表記法と呼ばれるものです。


(1) 具体例

まずはさっそく内包表記法を使った、リストオブジェクトを新しく作るコードを書いてみましょう。次のコードを見てください。

a=16
b=7
newlist=[c for c in range(a-b)] #内包表記法を利用
print(newlist)



これは、0から8までの9(つまり16-7)個の整数について、for文を使って、変数cに0から8までの数字を1回につき1つずつ順番に(つまり9回)入れていき、それにより、newlistというリストオブジェクトを新しく作成するプログラムです。

この結果作成されたnewlistは、0~8までの9つの整数を要素として持つリストとなります。すなわち、

[0, 1, 2, 3, 4, 5, 6, 7, 8]

と出力されます。



(2) メリット

もちろん同じことは、

newlist=[0,1,2,3,4,5,6,7,8]
print(newlist)



と書くことでも実現できます。これでも、[0, 1, 2, 3, 4, 5, 6, 7, 8]というリストが出力されます。

しかし、「newlist=[0,1,2,3,4,5,6,7,8]」と書く場合には、リスト要素の全てを羅列して最初から書く必要があります。

今回は0から8までのたった9個の整数なので楽ですが、もしこれが0から9999までの整数を要素とするリストだったり、1万個の要素を持つリストだったりすれば、最初からリストの要素を全て羅列するのはとてつもなく面倒です。

またプログラム実行のたびに毎回リストの中身の要素の個数が変化する、そんなリストを作るときもあるでしょう。その場合はそもそも最初から要素を羅列することは不可能です。

内包表記法によるメリットはそのような、

  • リストの要素の個数が大量
  • リストの要素の個数が毎回変化する



という2つの場合に、自動的にリストを作成できる便利さを持つというメリットがあります。

また、次のコードを見てください。

newlist2=[] #中身が空のリストを作成
for d in range(a-b): #0~8までの範囲で「9回」、リストに変数dの値を順次加えていく
    newlist2.append(d)

print(newlist2)



これを実行しても、

[0, 1, 2, 3, 4, 5, 6, 7, 8]

というリストが出力がされます。

ですが、上(1)のコードと比べると、どちらが短く簡潔かはすぐにわかると思います。上(1)の内包表記法を使った書き方では、たった1行のコードで済みます。

リストの内包表記法はコードをより短くシンプルにできるというメリットもあるわけです。これで、新規リストオブジェクト作成も怖いものなしです?

稼げるプログラミングスキルを手に入れるために

Tech Academy

厚切りジェイソンのCMでおなじみのプログラミングスクール。自宅でオンライン受講OK。現役のプロが一人一人に専属メンターになってくれ、質問すればすぐに回答。転職保証あり

Udemy

世界最大級のオンライン学習動画サービス。AI・データサイエンスなど最先端のプログラミング講座からビジネススキル講座まで10万以上の講座から選び放題。講師に掲示板から直接に質問もできる。