見出し画像

≮Python≯ リスト内包表記の基礎 改訂版!

この記事は⬇️の改訂版です。


下記は、Pythonチュートリアルのリスト内包表記について書かれている部分の引用です。とりあえず今はさらっと読み飛ばしてください。

リスト内包表記は、括弧の中の式、 for 句、そして0個以上の for か if 句で構成されます。 リスト内包表記の実行果は、 for と if 句のコンテキスト中で式を評価した結果からなる新しいリストです。


まず、最初に簡単なサンプルプログラム①を示します。
サンプルプログラム①は、0〜4 が順番に入っているリストを作成します。

l = []
 
for x in range(5):
   l.append(x)

print(l)

<実行結果>

[0, 1, 2, 3, 4]


次のサンプルプログラム②は、リスト内包表記を使って、サンプルプログラム①を書き換えたものです。
リスト内包表記は全体を [ ] で囲んで書きます。

l = [x for x in range(5)]
   
print(l)

<実行結果>

[0, 1, 2, 3, 4]

リスト内包表記を使えば、この様に簡潔に書く事が出来ます。

 [x for x in range(5)]

は、最初の式と、その右側にある for 句の間にセパレータを入れて考えると分かりやすくなります。こんな感じです。

 [x | for x in range(5)]

そしてセバレータより左の式(この場合は x)が最終的なリスト要素の姿です。
appendメソッドの引数と考えると分かりやすくなります。こんな感じです。

[append(x) | for x in range(5)]


サンプルプログラム③は、0〜4 を 2倍した値が格納されたリストを作成します。

通常の書き方とリスト内包表記を使った例を同時に示します。

l = []
    
for x in range(5):
   l.append(x * 2)
   
print(l)
   
l2 = [x * 2 for x in range(5)]
   
print(l2)

<実行結果>

[0, 2, 4, 6, 8]
[0, 2, 4, 6, 8]


ここで、この記事冒頭の Pythonチュートリアルのリスト内包表記についての引用部分を読んでみてください。理解しやすいと思います。

リスト内包表記は for 句、そして0個以上の for か if 句で構成されます。

リスト内包表記は、新しいリストを返します。



最後に for 句と if 句で構成されたサンプルプログラム④を示します。

サンプルプログラム③に加筆したものです。

通常の書き方とリスト内包表記を使った例を同時に示すので見比べてください。

l = []
   
for x in range(5):
   if x > 2:  # x が 2 より大きければ x * 2 をリストに追加
       l.append(x * 2)
   
print(l)
   
l2 = [x * 2 for x in range(5if x > 2]
   
print(l2)

<実行結果>

[6, 8]
[6, 8]

サンプルプログラム③に if 句が追加されただけなので理解できると思います。


これより複雑なリスト内包表記に付いて知りたい方は、下記リンク先を参照してください。
ここまで理解出来ていれば、より複雑なリスト内包表記も理解出来ると思います。



*オマケ* 

「Pythonチュートリアル 第3版 付録 E  E.2 内包がわからぬ」より引用

まず、「内包」とはもともと集合論の「外廷」と対になる言葉だ。外廷は集合の内容を具体的に列挙し、内包はその性質により記述する。1桁の正の偶数集合を考えてみよう。集合の記法ではこのようになる:
       外廷: {0,2,4,6,8}
       内包: {x: x は 0 以上 10 未満の偶数}
それぞれが Python リストの
        {0, 2, 4, 6, 8}
        [x for x in range(10) if x % 2 == 0]
と似ていることに気づかれることと思う。



ACER エイサー
Chromebook クロームブックノートパソコン Chromebook (クロームブック) Spin 311(コンバーチブル型) ピュアシルバー CP311-3H-A14N [11.6型 /MediaTek /eMMC:32GB /メモリ:4GB /2020年9月モデル][11.6インチ 新品 クロームOS]

https://a.r10.to/hwCflw

画像1

画像2



#Chromebook  で #Python #Python3 #プログラミング を勉強中 !

#リスト内包  #リスト内包表記