63’s blog

都内のSEのブログです(*‘ω‘ *)技術は好きですが仕事は嫌いです。

Pythonの内包表記(コンプリヘンション)

なかなか卒業研究というのは何をしたらいいのかわからないもんですね(。-∀-)

先生に許可を取ってないからこのまま進めていいのかもよく分からず…w

今は仕方なく関連研究であったり、今後使いそうな技術を活用できるように先にコードを打っていたりと先がしっかりしていないのに進めちゃってます笑

そんなときにもっとコードを綺麗に書きたくなりました
そこで今回は内包表記(コンプリヘンション)についてです。

内包表記って何?って人もたくさんいると思います。もし、大学の授業だけで習っただけだと関わらない可能性もあります(普通に習ったわ!って場合ごめんなさい…)

内包表記とはfor文でリストを作るときにスマートに作る方法です。

例えば以下のようにlistという0から9のリストを作るとします。

list=[]
for i in range(10):
     list.append(i)

これをもっとスマートに書こうというのが内包表記です。実際に以下のように書いていきます。

list=[i for i in range(10)]

これで上の数行のものと一緒になります。
実際これは慣れるまではわかりづらいと思います。
[]の中の最初の変数(ここではi)をappendしていくイメージです。

もっとこれを応用したのももあります。
入れ子構造にしたり、if文で条件を付けることも可能です。

・入れ子構造

for i in range(10):
  for j in range(5):
     list.append((i,j))

これを内包表記で書くと

list=[(i,j) for i in range(10) for j in range(5)]


・if文を使った条件つき

for i in range(10):
   if  i % 2 ==0:
      list.append(i)

これも内包表記で書くと…

list=[i for i in range(10) if i % 2 ==0]

となります。

正直最初はわかりづらいと思いますがこれをマスターするとほんとに行数が変わってきます。
ただ、誰かと協力しながら作るときにはわかりにくいコードになってしまうかもしれないので、それぞれレベルに合わせて作っていくのが大切ですね