こんにちは,米国データサイエンティストのかめ(@usdatascientist)です.
データサイエンスのためのPython入門第4回です(講座の目次はこちら).今回も前回に引き続きPythonの「おさらい」です.
(「データサイエンスのためのPython講座」動画版がでました!詳細はこちら)
...わかってます,けどデータサイエンスで使うモジュールを学ぶための前提事項なんです(泣)ゆるしてw
今回は文法をまとめました.難しい文法は省いて,今後の記事で最低限必要だと思うものに絞ってます.サーっと見て,知らないものがあれば一度Jupyter Labに書いて試してみましょう.プログラミング経験者は,コードを読んで文字は補助的に読んでいただければと思います.
今回まとめたのは
- 演算子
- if 文
- loop
- for loop
- range関数
- リスト内包表記
- while loop
です!
目次
演算子
演算子(えんざんし)というのは + とか = とか > のことです.初心者の人は % がなかなか馴染めないかもしれませんが,割った余りを返します.「こんなのあるんだ〜」くらいに思ってください.あと, or で繋ぐ場合,1個目がFalseなら2個目は評価されません.これは重要なので覚えておきましょう.繋ぐものが単体でない場合は括弧()で囲むことをお勧めします.みやすいですからね
== の他に is で比較することもできます. is はオブジェクトが同じか(同じメモリにあるか)を評価します.オブジェクトを作ったら,そのオブジェクトの情報はメモリという短期の記憶装置に保存され,いつでも呼び出すことができる状態になります.上記の a=[1, 2] と b=[1, 2] の例でいうと, a と b の中身は一緒ですが,全く別のオブジェクトですよね? id() でそれぞれのIDをみると,当然別のIDが振り分けられています(上記画像参照). is は,同じメモリを使っているか,つまり全く同じオブジェクトであるかを評価するので a is b は False になります.ちなみに, not をつけて a is not b とすれば True になります. is not はよく使うので試してみてください.
また, None というのは他の言語でいう null です.「なにもないよ〜」というもの.何に使うのかわからない人多いと思いますが,今はそんなものがあるんだ程度に覚えておいてください.データサイエンスではよく出てきます. None かどうかを評価する場面が非常に多く出てきますが, is で評価しましょう.
ちなみに,Noneはたしかに「何もない」を意味しますが,全くなにも定義していないundefineとは違い,定義はされているがなんのオブジェクトも代入されていないことを意味します.
if 文
条件分岐ができる文です.基本的にこのif文を使ってプログラムのフローを組み立てていきます.超頻出です.「条件」というのはBooleanになるものです.例えば 1 > 2 とかね.
Pythonでは
if (条件): の下にその「条件」が
True の場合に実行するScriptをインデント(スペース4つ)して記述します.条件文のあとにコロン(:)をつけるのを忘れないようにしましょう.
条件がFalseの場合,必要に応じelifで再度条件分岐させるか,elseで実行するScriptを書きます.
if文を一行で書くこともできます.その場合はelseが必要です(下記写真参照).滅多にでてきませんが,例えば次回紹介するlambda関数で使ったりします.特に理由がなければ使うのは避けましょう.読みにくいので.
for loop と while loop
Loop処理もプログラミングの重要なロジックです.for loopは「リストの各要素に対しての処理を回す」ものでwhileは「ある条件が満たされるまで処理を回す」ものです.
- for loop
まずはfor loopの例をみてみましょう
1.まずリストを作ります.これは前回の記事で書いた通りです.ここではフルーツの名前をリストにしました.なんのリストなのかわかるようにfruitsやfruit_listとすると親切です.「リスト」だとわかる名前がいいです.
2.for 文を使ってリストの要素を先頭から処理します.for文の構文は for element in list: です. element の変数名はなんでもOKです.今回はfruitsなのでfruitとしました.わかりやすいから.できるだけ意味のある文字にしましょう.ここでもコロン( : )を忘れずに.このfruitという変数にリストの文字が入っていくイメージです.1回目のループでorangeが,2回目はbanana,,,みたいな.
3. for文のあとに.要素に対する処理をインデントした形で記述します.基本コロン( : )のあとはインデントで入れ子にするというのを覚えておきましょう.私はバナナが嫌いなので,’banana’以外のfruitには’I love’, ‘banana’には’I hate ‘と print しています.for文の中にif文を書く場合はさらにインデントします.入れ子の入れ子です.ちょっとややこしいかもしれませんが,当たり前のように出てくるので慣れましょう.あと, format() を使って文字列を補完するのは前回紹介した通りです.かなり使うのでこれにも慣れてください.
- range(引数1, 引数2)
番号を0から順に1, 2, 3….と処理したいときがよくあります.その場合は, range(引数1, 引数2) 関数を使って数字の順番のリストを作ります.引数1〜引数2-1までのリストを作れます.引数2は含まないことに注意です.前回の記事のsliceと同様range(N, M)としたときN以上M未満なので気をつけましょう.
実際にリストを作るときはlist()関数に入れますが,for文で回すときは不要です.
これ,めちゃくちゃ出てくるので覚えておきましょう.なお,慣習的に数字で回すときの要素の変数名にはiを使います.
- リスト内包表記
あるリストの要素に対して処理をして新しいリストを作りたいというケースがよくあります.例えばリストの要素を全部2倍にしたいとか2乗したいとか.
そういうときはよく内包表記(英語だとList Comprehensionsと言います)というのを使います.データサイエンス超頻出なので慣れましょう.
内包表記というのは,リストの中にfor文を書いてその結果をそのままリストにできるという優れものです. [処理 for 要素 in リスト] で,処理結果のリストが作られます.
...はい,これ初心者の人にはなかなか理解できないし慣れないと思います.自分はいつも[for 要素 in リスト]を作ってそのあとに処理内容を考えて[処理 for 要素 in リスト]と言った具合に付け足します.
例えば今回の例だと,「0から3の数字に10を掛けたリストを作りたいな」と思ったらまず [for i in range(0, 4)] を作って,「各要素に10を掛けたいからi*10」という流れで [i*10 for i in range(0, 4)] を作るイメージです.速度もこちらの方が .append() を呼ばない分速いので推奨です!最初はなかなか慣れないですが,色々な人のコードをたくさん読んでくうちに何度も出会って慣れてきます.リスト以外にも内包表記できるものがありますが,あまり使わないので割愛します.
- while文
for文と同じく,loopします.for文はリストの各要素に対して処理をしているのに対し,whileはある条件が満たされるまで永遠に回し続けるものです.無限ループの原因にもなるので使い方には注意ですw
for文に比べると圧倒的に出番がすくないので忘れがちな存在ですが,頭の片隅に入れておいてください.時々必要になります.while文の9割は以下のパターンです.変数を初期化して,while文で条件文を書き,その条件がTrueになるまでの処理をその下に書いて,最後に条件がいずれTrueになるように処理(ここでは毎回1を足す)を書く.さらにいうと大抵 i=0 で初期化してwhileの最後に i +=1 でインクリメントするというケースがほとんどでしょう.
自分は「あれ,pythonってwhile文あるっけ」ってなるくらい使いませんが,時々どうしても必要になる&基本文法なので今回入れました
まとめ
まとめばかりが続いていて退屈ですが,ここで紹介した内容は超超基本なので絶対にマスターして欲しい内容であります!
特にリスト内包表記はデータサイエンスでよく使うので覚えておいて欲しいです!今後も講座で出てきます.
次回はPythonの関数についておさらい(またおさらい・・・っ)していきます.あともう少しでデータサイエンスのモジュールが出てくるのでもう少し頑張ってくださいw
それでは!
追記)次回の記事書きました.Pythonの関数についてまとめてあります!
Pythonの練習をしたい人は是非DataScienceHubコミュニティへ!
DataScienceHubでは’Coding Challenge’というコンテンツを実施しています.毎週プログラミングの課題を出しているので是非チャレンジしてください!
他の人が提出したコードを見れたり,プロからのレビューを受けることができます.こんなチャンスは他にないので是非活用いただければと思います.