内包的なリスト宣言の方法

どうも、まかろにです。
友人とドミニオンのオンラインをやったらはまりました。頭使うゲームは疲れるけど、楽しい。
このゲームは簡単に言うと資金を使って土地を買うカードゲームで、補助のカードを使うことで効率的に土地を買ったり相手の行動を邪魔することができるというものです。
基本無料なので興味がある方は是非!


さて!今回は自分でpaizaの問題を解いていた時にリスト内包表記について学び直したので紹介します。
若干備忘録的な感じになります。


リスト?

リストとはPythonにおける配列の別名です。(詳しい人に怒られそうなざっくりした説明ですが、この認識で大体動かせます。)
つまり、リストでなにができるか?というと、
似た属性の情報(一連の数字とか)をひとまとめにして扱うことができるようになります。

例えば、テストの点数とかのスコアを扱う時に以下のように宣言できます。

  • ケース1:全部個別に宣言

japan = 34
math = 83
science = 23
social study = 94
english = 76

  • ケース2:リストを使って宣言

score = [34, 83, 23 ,94, 76]

ケース1の場合には合計を出すときに全ての変数を書いていく必要がありますが、ケース2の場合にはfor文やsum関数などで一発で計算できる利点があります。

他にも要素を追加したり削除したり、スタック的に使ったり...有用なデータ構造の一つです。


内包的定義やりたい

まずそもそも配列の定義の仕方ですが、一番頭のイメージとコードが繋がるのが下の書き方なんじゃないかと思います。

0から9までの数字をリスト ”digit” に格納します。

スクリーンショット 2018-11-04 22.52.14.png

他にはこんな書き方が直感的ですね。

スクリーンショット 2018-11-04 22.53.53.png

わかりやすいけど、上のは配列の大きさ100とかになると書きたくないし、下のは3行も書くのが見辛いです。
そこで内包的定義を使うことでコードをクリーンにスッキリさせることができます。
以下のような書き方になります。

スクリーンショット 2018-11-04 22.51.23.png


で、今回困ったのが以下の作業のやり方。

<作業内容>
ある配列Aをみて、その数字が偶数の時配列Bに”even”を格納、奇数の時には”odd"を格納する。

これの書き方は以下のようになります。


スクリーンショット 2018-11-04 22.51.49.png


このif文の書き方は三項演算子と言って

<条件が真の時に実行される内容> if <評価する内容> else <偽の時に実行される内容>

というように記述する方法です。
今回はAの中身を"_"に代入した後、それを2で割って余りが0なら偶数と判断し、"even"を格納しています。
これを知っていると、コードをより簡潔に書けるので練習して慣れることをお勧めします!!


まとめ

今回の内容はPythonのリストの内包表記でした。
三項演算子を使うことで、より簡潔にリストを宣言することができ、可読性を上げることができます。


それでは今回はこれで終わりです!!
最後まで読んでいただきありがとうございました!!

この記事へのコメント