みんな新しい技術を勉強してるのに、私は何やったらいいか全然決まらないですよねぇ~。。。。
それならディープラーニングとかどう?
という天からのありがたいお告げを頂戴し(実際はもう少し近場から聞こえたけど)、ただ今Pythonが急激に気になり始めているきんです。
といっても、最初にディープラーニングと言われた時は、なにそれ?英会話の新しい勉強法かしら?^^と、スピ○ドラーニングと混同するぐらい最近のトレンドに疎い私ですが、思い立ったら吉日と早々に本を買ってきました。
…そして、これまた早々に本棚の肥やしとなりました。
(そんな感じで肥やしと化している3000円前後の本が他にも数冊いるのですが、それはまた別のお話。。。)
そりゃそうですよ。
足し算引き算もおぼつかない私がいきなりあんな数式見せられて(自分で見たんだけども)、吐き気をもよおさないはずがない。
そもそも私、PHPとJS以外触った事ないじゃない。とりあえず機械学習の事はいったん忘れて、Pythonの基本のきからお勉強しましょう。
ちなみに、Pythonは2と3で結構書き方が変わり、互換性がなかったりするそうです。とりあえず新しい方がいいでしょ的なノリで、Python3のお勉強をしたいと思います。
~ 毎度おなじみなのですが、新シリーズ始まったと見せかけて始まらないかもしれません。次回ブログに登場した際にPythonのpyの字も出てこなかったら、お察しください。 ~
変数の代入
まずはふつうに変数に値を代入
■PHP
$str = 'hello';
echo $str;
■Python
str = 'hello'
print(str)
変数に「$」が要らなくて、処理の末尾は改行すれば「;」は不要なわけね。
I see. I see.
文字列オブジェクト[インデックス]
で引数に指定したインデックスを持つ要素を取り出す事ができます。
str = 'hello'
print(str[0]) # h
おぉっ?!!
いきなりPHPの概念で固められた私の許容範囲外の出来事が起こりました。
変数なのに、インデックス指定して一文字だけ拾ってこれるんだ…。
なんだか配列みたい…。こんなのどんな場面で使えばいいのか、今はまださっぱり思いつきません。。。
配列っぽいやつ
他にもPHPの配列っぽいやつにはリスト、タプル、辞書型があります。
リスト
list = ['a', 'b', 'c', 'd']
PHPの
$list = ['a', 'b', 'c', 'd'];
と一緒だね。
要素を追加したり、編集したり、数値と文字列みたいに異なるオブジェクトも一つのリストに格納できるみたいです。
インデックスには、PHPと同様0から順番に数値が割り振られているので、一つの要素を指定して取得する場合には
print(list[0]) # a
となります。
スライスといって、範囲を指定して取ってくる事もできるみたいです。
slice = list[1:3]
print(slice) # ['b', 'c']
タプル
tuple = ('a', 'b', 'c', 'd')
リストに似ている。
やっぱり、数値と文字列みたいに異なるオブジェクトも一つのタプルに格納できて、要素を指定して拾って来れたり、
print(tuple[0]) # a
スライスも使えます。
slice = tuple[1:3]
print(slice) # ['b', 'c']
リストと違う所は一度作成されると要素の追加や変更できない事。
つまり
tuple = ('a', 'b', 'c', 'd')
tuple[1] = 'B'
これはエラーになります。
なんだよそれ!じゃあリストがあればタプル要らないじゃないのっ
って言いたくなるのは、素人が必ず通る道なのだとか。
辞書型
PHPでいう所の連想配列。
インデックスではなく、キーを指定して要素を格納する。
■PHP
$arr = ['a' => 'A', 'b' => 'B'];
■Python
arr = {'a':'A', 'b':'B'}
注意する点としては、要素間に順番がないので、
ループしたりする時に、どの順番で出てくるかは保証されていません。
そして、要素の値にはリストや文字列などすべてのオブジェクトが使用可能なのに対し、キーには変更が出来ない型という制約があります。
つまりタプルは良いけど、リストはダメなんだとか。
dict = {1:['a', 'b'], 2:['c', 'd']} # これは大丈夫
dict2 = {('a', 'b'):1, ('c', 'd'):2} # これも大丈夫
dict3 = {['a', 'b']:1, ['c', 'd']:2} # これはダメ
なるほど。それでタプルが必要なワケか。
参照するキーがあとあと編集されちゃうと困るって事なのかしら?
よくわかんないけど^^
ちなみに、リストとタプル(と文字列も)はシーケンス型、辞書はマップ型と分かれるらしいです。PHPではインデックスの配列と連想配列の違いをあまり意識しないから、ちょっと違和感ありますね。
そもそも、いちいち「PHPでは~…」と比較してしまう所が頭の固い素人のダメな所かもしれません。
よそはよそ。うちはうち。PythonはPython。
すっと吸収できる柔らかい頭が欲しいです。。。