KNIMEST’s diary

KNIME使いがPythonも使いたくて勉強中

【Python学習帳】021_内包表記

初学者を対象としている京都大学の無料Python教材の学習中です。
「プログラミング演習 Python 2021」
Version2021_10_08_01.pdf

hdl.handle.net

CC-BY-NC-NDライセンスに従って引用します。

第5章の制御構造の勉強中です。

knimest.hatenablog.com

今回は 内包表記 を学ぶのですが、教材では驚くほど簡潔な扱いでした。

5.2.9 for 文を使ったリストの内包表記

値が添え字の2乗のリスト

[0, 1, 4, 9, 16]

を作ることを考えます.上のように直接,明示的に書いても構いませんし

a = []

for i in range(5):

a.append(i*i)

と書いても構いません.このほか Python では for 文をリストの中に書く内包表記

と呼ばれる使い方があります.

a = [i*i for i in range(5)]

以上全文でした。

 

他の情報源を探ってみました。

tech.nkhn37.net

Pythonらしいシンプルで読みやすいコードの書き方を「Pythonic(パイソニック)」なコードと言いますが、内包表記も代表的なテクニックの一つかと思います。是非使い方を覚えてもらえるとよいかと思います。

内包表記は、内包表記を使用しない記載方法よりも内包表記を使用した方が処理速度が速いという特徴があります。そのため、積極的に内包表記を使用するように意識してもらうとよいでしょう。

 

ただし、注意点として条件が複雑な場合等には、必ずしも内包表記を採用するべきではありません。

 

チームでの開発をしている場合には、チームメンバーの他の人もソースを読むことになるため、読みやすく内容を理解しやすいように可読性を意識したコードを書くことが重要です。内包表記を使うことでコードが複雑になってしまう恐れがある場合には、内包表記を使用するべきかよく検討するようにしましょう。

上記は私にとってはなるほどと思う内容でしたので引用しています。しばしば他の方のコードの内包表記で何をしているのかわからなくて躓いたことがあり、今も苦手意識があります。

 

今回はリストについての内包表記の具体例が見たくて、下記の記事も読みました。

tech.nkhn37.net

https://tech.nkhn37.net/python-list-comprehension/

If文での条件設定も使えるので、1行でシンプルな記載ができますね。

Python チュートリアルも見てみました。

docs.python.org

https://docs.python.org/ja/3/tutorial/datastructures.html#list-comprehensions

どうでしょうか、簡潔で読みやすいと思いましたか?

もう一つ内包表記の良い点があるそうです。

それは内包表記の中で変数を使っても、いかなる副作用もなく処理できることです。
一方で、for文をつかったループ処理を行った際には、ループが終了した後にも存在する x と y という名前の変数を作る (または上書きする) ことに注意が必要なようです。

 

以下は参考までにプログラミングにおける副作用についてこちらの記事を紹介します。ウラキ少尉やランボーの例も秀逸。後半は初心者が読んでもわかる内容ではなかったですが。

python.ms

記事を読んで引用するばかりでなく使って慣れることが大事かなと思ったので、今後実際に使ってみたいと思います。