あざらしのPythonべんきょうにっき

Pythonの勉強に関する備忘録と時々趣味

めちゃくちゃ使う!リストやディクショナリ

はじめに

前回は変数の扱い方のあれこれについて書いていきました。
さて、今回はリスト(配列)やディクショナリについて説明します。
リスト…これ本当によく使う。 それに、今後リストの拡張版みたいなのも沢山出てきます。
気になる人はNumpyやPandasなどを調べてみて、こいつらも使いこなすとめっちゃ便利(らしい?)。

リスト(配列)について

とりあえず定義してみる

早速だけど、配列をつくる。

a = [1, 10, 100, 1000, "abc"]
print(a)

まぁこれを実行すると

[1, 10, 100, 1000, 'abc']

と出力されます。簡単ですね。

まず、変数とは違って[  ]で囲って定義します。
そうすると、aという仕切りがある箱ができて、その一つ一つの部屋の中に数値を入れていきます。
例のように、"で囲ったらstr型(文字列)として箱の中に格納されます。 "がないと、 「abcなんて変数聞いてないよ!!」

と怒られるので注意!

どうやって取り出す?

fruits = ["イチゴ", "バナナ", "モモ", "メロン", "ブドウ" ]
print(fruits)

ここに、フルーツを入れた箱を作りました。 選んだフルーツの順番とか色とかに大きな意味はないです。

この箱の中から「メロンを取り出したい!!」 そんなときは

fruits = ["イチゴ", "バナナ", "モモ", "メロン", "ブドウ" ]
meron = fruits[3]
print(meron)

というように、リストに[]をつけて、その中に0から始めた通し番号を入れることで取り出すことができる。

逆に、「いや、3番の部屋に別のもの入れたいわ」
となったときは

fruits[3] = "キウイフルーツ"
print(fruits)

という風に直接入れてあげます。 そうすると

['イチゴ', 'バナナ', 'モモ', 'キウイフルーツ', 'ブドウ']

となる。メロンはpythonが食べちゃうのでなくなります。

リストの操作いろいろ

何となくリストのイメージがついたところで、どんどん使い方を流していきます。なんでも実行するに限る!!
準備として

b = [1, 2, 3, 10, 20, 30, 100, 200, 300]
print(b)

より、

[1, 2, 3, 10, 20, 30, 100, 200, 300]

を得る。

  • リストの長さを知りたい
    len(b)
    ⇒  9
  • 0から3つ分の数が欲しい
    c = b[0:3]
    ⇒ [1, 2, 3]
    注)ここではb[0], b[1], b[2]しか取り出されない、つまりb[3]は含まれない
  • ある番号から最後まで
    d = b[2:] ⇒ [3, 10, 20, 30, 100, 200, 300]
  • 最初からある番号まで e = b[:7] ⇒ [1, 2, 3, 10, 20, 30, 100]
  • 最初から最後の要素の一つ前 f = b[:-1] ⇒ [1, 2, 3, 10, 20, 30, 100, 200]

あきた…

ちなみに、しれっと一番最後の-1ってやつ面白いね。
(今のところ使えそうな場面がない…)

当然、こんなこともできます * 要素同士の計算 g = b[0] + b[1]
⇒ 3

リストのリスト(2次元配列)

リストは下のようにの入れ子にすると、2次元配列が作れます。 これも他の言語と似てますね。
table = [[10, 12, 13], [21, 19, 22], [15, 24, 17]]

ちなみに、もう一つを追加すれば3次元もできるよ。 画像処理のときに使うかもしれないね、(縦, 横, カラー)みたいな感じで。 この2次元配列の要素へのアクセスは
table[1][2] (2行3列目)
⇒ 22
というようにできます。

行にアクセスするには
table[2]
⇒ [15, 24, 17]

というようにできます。

自分の感覚からすると、2次元配列は今後出てくるであろうnumpyやpandasを使う事があるかもしれない。 けど、使い方のイメージは似ているので怖がることなく…

ディクショナリ

次に、リストと似てるけど、便利?なディクショナリの説明です。 とりあえず、一連の使い方はこんな感じ。

azarashi = {"名前": "ゴマ", "身長": 120, "体重": 100, "エサ": "アジ"}
print(azarashi)

print("名前は " + str(azarashi["名前"]))              # => 名前は ゴマ
print("体重は " + str(azarashi["体重"]) + "kg")       # => 体重は 100

azarashi["車"] = "ポルシェ"
print("好きな車は " + azarashi["車"])                 # => 好きな車は ポルシェ

7行目のように、後から足すことだってできます。
ディクショナリは、"名前"というキーと中身を紐付けすることで、中身を取り出すことができます。
リストと違って便利なところは、定義の順番を気にしなくていいということですね。

長くなりましたが今回はこんなとこで。

え?型を指定しなくてもいいの!?!?!?

大分更新が開いてしまいました。 なかなか時間作ろうとしないので、なんとか無理やり作るため投稿しました。

では今回は基本中の基本のデータの型について話します。
今回参考にした本は「ゼロから作るDeep Learning」です。
まだ、DeepなLearningはしてないよ、なんせマシンがない!!笑

では、本題に

型を定義する必要がない!!

pythonでなにか値を入れたいなーなんて思った時

a = 10

これだけなんだよね。
これ、C言語出身の人からすると驚きだよね!! C言語だと

int a = 10;

そう、整数型のintを指定しないといけない。
しかしpythonの場合、「とりあえず入れとけーー」で済んでしまう。 そこがすごく感動しました。

次に、画面に結果を出したいとき(標準出力といったりもします。) pythonだと

print(a)

で、10と出力されるはずです。
ちなみに、print()は画面に出力するための関数で、()の中に出力したい変数を入れればいいです。
これがCだと

printf(%d, &a);

なわけ。 つまり、
「これからint型だすよーほらa!」

ってやんないといけない、多分ここで小数(float:浮動小数型)を指定しても、問題無かった気がするけど警告がうるさい。
まぁそんなややこしいことが無いのがいいよね。

数字の計算は朝飯前

数字の四則計算はもう、言うまでもないよね。

a = 10
b = 20
c = a + b
print(c)

そう、ただ"+"とか"-"とかすればいいだけ。

文字を打ちたいときは?

文字の型は?

先ほどは変数aに10という"数"を入れましたが、文字を入れたいときは

b = "あざらし"

とすればよいです。
ちなみに、あざらしの両サイドに"(ダブルクォーテーション)を使ってますけど、'あざらし'(シングルクォーテーション)でも問題ないです。
このときbはstr型という文字列の型になっています。
ただし、混ぜたらだめだよ。トイレ用洗剤と一緒だね。

…はい、次に文字と文字を結合するときはどうすればいい?ってことですが。

str1 = "たどり着いた僕はSo Superior 今悩むのはバカな話y'all "
str2 = "夢に見てたこの場所に立ってる今日"
print(str1 + str2)

というプログラムを組めば、このstr1とstr2がくっつきます。 ちなみに、

str3 = "見せつけてやれ "
str4 = "Blast!"
print(str3 + str4*4)

と打つと

見せつけてやれ Blast!Blast!Blast!Blast!

という風に、str4を4回繰り返すという意味になります。

数字と文字が混ざる時は?

数字と文字を混ぜるときはどうすればいいの?ってことですが、

ラッコ「簡単だい!

print("bはa才です。")

だろ」

ブッブーですわ、貝あげない。
何故かというと、"で囲んだ部分は文字列扱いになる! つまり、aやbはaという文字、bという文字となるからだ。
むしろ、そうならないと不便だからである。

ざらしはこう言います。
「ちゃんと、ただの文字とa,bを区別してかかないとダメだよ。

print(b + "は" + str(a) + "才です。")

が正しいよ。」

ということです。正解したあざらしにはアジをあげましょう。

ここでポイントとなるのは、str(a)だね。 str()とすることで、aをstr型、つまり文字と解釈しようというわけです。 この辺はCと似てるかもしてない。

まぁこんな感じで文字列と数字の関係を分かってくれればいいかなと思います。

長くなりましたが、今回はここまで。
次回はリストとかクラスとかを話そうかと考えています。
クラスという概念は少し苦手です…

Pythonの開発環境

Pythonの開発環境について

最初の記事は環境構築です。 LinuxMac OSとは異なり、WindowsではPython環境を自分で入れなければならないんだよねー

今までLinux環境でしかプログラミングをやったことがない私からすると。 開発環境?なにそれおいしいの?

みたいな感じになるよね。 ということで、環境構築を始めます。

その前に

ところでpythonにはPython2系と3系があります。 厄介なことに、こいつは相互互換できないものがあるということ?

しかし、最近の書籍は3系で書かれたものが多く、今後は3系にシフトするのではないかな…と ってことで、3系を入れることにするよ。

Anaconda

はい、早速強そうな名前がでてきました。Pythonを始めようとするとまずこんな単語が出てくると思います。 これは何かというと

Anaconda はデータサイエンス向けに作成された Pythonパッケージで、科学技術計算などを中心とした数多くのモジュールやツールが独自の形式で同梱されています。 macOSUnix環境では、ほとんどのモジュールがコンパイル済みパッケージを提供しているため、Anaconda を使わなくとも、通常の pip コマンドでも簡単に環境を構築できます。

しかし、Windows環境のように、簡単にインストール可能なモジュールが提供されていない環境で、機械学習などのためにPython を使用するなら、多くのモジュールがデフォルトでインストールされる Anaconda はとても便利です。 Anaconda - python.jp

というわけで、要は「今後使うであろう様々な計算ツール等を一括管理してやろう」という便利ものだね。

で、何でこの名前を出したかというと… こいつをインストールすると

  • Spyder
  • Jupyter Notebook

というものが追加でインストールされます(Windows 64bitバージョンだと)
で、今回はここに追加されたSpyderを使用したいと思います。 なぜなら新たにインストールする必要がなく、楽だから!!笑
Jupyterについてはまた使ってから書きたいと思います。

Spyder

ということで本題に入ります。
このSpyderというものが、統合開発環境IDE)の1つであります!
まだ、初心者なので、とりあえずこれを使う事にしますね。いいのがあれば教えてください。 f:id:azalatch:20180724095200p:plain

Spyder起動時画面

起動するとこんな画面が出てきます。ちなみに起動はとても遅い!!
この画面の左側のウィンドウは仮のスクリプトエディタ、右上は使用している変数のテーブル、右下がコマンドライン(コンソール)となっています。
各々は後程説明します。

早速書いてみる

ここでは、Spyderを使ったプログラムの書き方と実行方法に触れます。

直接打ってみる

まずは、直接コマンドラインにプログラムを書いて実行してみます。

In [1]:
と書いてある場所に以下のように打ち込みます。すると

f:id:azalatch:20180724100059p:plain
print関数で標準出力したときの結果
"あざらし"が出力されました、かわいいですね。
関数がどうこうってのは別に書きます、ここではあくまで使い方。

ということで、「対話型形式でプログラムは書けたけど、一々ここに打つのめんどくね?」 っていったとこで、左側のスクリプトエディタが火を噴きます。

スクリプトファイルの実行

それでは下図のように左のウィンドウにプログラムを書いて、F5キーで実行すると…

f:id:azalatch:20180724102126p:plain
スクリプトファイルの実行結果
右下に実行結果が出て、右上の"変数エクスプローラ"を見ると…なんか表がある……

そう、Spyderが便利だなと感じたのはここです!!
例えばプログラムのどこかでエラーが出てる or 意図していない値が出る…
ってときはここの変数を見ると解決できる。 matlabに雰囲気が似ていて使いやすいですね。

その他

ちなみにこのとき使用した、temp.pyは一次ファイルで閉じると消えてしまいます。
なので、保存したいときは新規作成(タブの紙のアイコンのやつ)で新規作成&保存することで実行可能だ!

また、この作業場所ってのは右上の窓に書いてるから場所が分からなくなったら参考にするといいよ。

おわりに

今回はPythonの開発環境であるSpyderについて紹介しました。
次回以降は具体的にプログラムについて書いていきます。

C言語経験があることから、多少説明不足があることもあるかと思いますがご了承ください。 以上!!

Python3勉強します

はじめに

C言語初心者からPython入門者にジョブチェンジした社会人1年目です。

そんな入門者のPython勉強の一環として、ブログを書くことにしました。 「他人のポストを見て勉強すればいいだろ…」 なんて声も聞こえてきそうですけど、アウトプットが一番の勉強になるかな(ってのと自己満というのと) あとは、これからも散々お世話になることだし自分も何か役立てればいいかなと。

Pythonは初めて、プログラミングも大した技能が無いためお手柔らかにお願いします。

ざっくり経歴

万が一自分の記事を見た人が「こいつ、どんくらいのレベルなのか?」となったときに、ある程度レベルを把握してもらうための自己紹介です。え、こういう使い方でよい?

プログラミング経歴

  • C
    研究で基本的に使用。基本的には配列を用いてゴリゴリ計算する感じ。(行列計算とか)ポインタがめちゃくちゃ苦手。
  • C+
    実験機を動かす時に使用。フレームワークはC+で書いて、それ以外はCで書くというなんちゃってC+で使用。
  • LaTeX
    はたしてプログラミングなのか?ってことは置いといて、論文やゼミ発表用の資料等で使用。 各所で頂いた、クラスファイルを使わせて頂いて文書作成をしている感じ。
  • Gnuplot
    これも??だが、上記のLaTeXでグラフを載せる際に使用。調べに調べ美しいグラフを描くことを目標に改良を重ねていった。
  • Html
    中学生のときに、少しだけ勉強。なぜならば、前略プロ…うっ頭が……
    けど、Web Scrapingやる時に少しは役に立つのかも。追々ね。

OSとか諸々

研究室でのプログラミングはUbuntu 14.04と16.04を使用した。 まぁこれは宗派みたいなもんで、Linuxベースの開発を先生が好んでいたと思われ(Windowsのエディタがemacsなあたり笑) そんなかんだで、家でプログラミングするときはノートで何故かvmUbuntuを入れてやっている笑 少しめんどくさいんで、環境を整えてUbuntu機にしちゃおうかしらと検討中も、めんどいんで放置。

ちなみに、宗派はemacs派です。先輩vimmerに憧れた時期もありましたが、標準モードが無理すぎて挫折。

おわりに

長くなりましたが、こんなところです。 早速環境構築から始めようかなと考えております。以上

とついでに

最初qiitaでやろうと思ったところ、どうやら重複内容は控えた方がよい雰囲気だと知り、こちらにシフトしました。 もし、何か有意義なことがあれば書いてみようかなと。