What one likes, one will do well 〜好きこそ物の上手なれ〜

寄り道しながらも、最後は昔から好きな物理とプログラミングに戻ってくる。そんな男の思いをつづるブログです。

Python入門~ドットインストール~

機械学習の勉強をするなかでPythonのコードを書くことがあります。昔にケントベックのテスト駆動開発入門という本の中で使われていたサンプルコードがPythonだったため、Pythonには抵抗感がなく、ネットで調べながらコードを書いていました。

何となくコードは書けるのですが、Pythonの基本やお作法というのは大切なため、基本を押さえるため、ドットインストールのPython入門を視聴しました。

そこで学んだことをまとめます。

日本語入力

日本語入力するときは、文字コードの指定と出力時にuをつける必要がある。

# coding: UTF-8

print u"こんにちは"

数値と文字列は変換が必要

数値と文字列は自動変換しないので、明示的に変換してあげる必要がある。

# 文字列に変換

print str(20) + "str" # 20str

# 数値に変換

print int("10") + 1 # 11

print float("1.0") + 1 # 2.0

# 結合する場合は文字列にする必要がある

print "I'm " + str(3) + " years old." # I'm 3 years old.

文字列にデータを組み込んで出力

他の言語でもありますが、使ったことがなかったので、ここで学べて良かったです。

print "name: %s, age: %d, weight: %f kg" % ("Tom", 10, 18.5)

リストは配列みたいなもの

リストと言うものがあって、配列みたいなもの。何が違うか微妙に分からないけど、ほぼ同じものと思ってます。for文でよく使うrangeがリストと同じものと言うことで、理解が深まりました。

# 定義

a = [2, 3, 1]

# 存在チェック

2 in a # True

# 配列の数

print len(a) # 3

# rangeは配列を返す

range(3) # [0, 1, 2]

range(3,5) # [3, 4]

range(3, 10, 2) # [3, 5, 7, 9]

# sort, reverse, split, join

a.sort()

print a # [1, 2, 3]

a = [2, 3, 1]

a.reverse()

print a # [1, 3, 2]

b = "d/c/b".split("/")

print b # [d, c, b]

"-".join(b) # d-c-d

タプルは変更不可なリスト

タプルは変更不可なリストのようです。変更不可ってことで使う場面がありそうです。

# 定義

a =  (2, 3, 1)

a[1] = 10 # エラー

# リストとタプルの変換

b = list(a)

print b # [2, 3, 1]

c = tuple(b)

print c # (2, 3, 1)

 セットは重複を許さない

セットは要素に重複を許さない集合で、集合型とも言われている。論理演算が使えるのが特徴的。

# 定義

a = set([2, 3, 1, 3, 1])

print a # set([1, 2, 3])

b = set([3, 4])

print a - b # 論理差 set([1, 2])

print a | b # 論理和 set([1, 2, 3, 4])

print a & b # 論理積 set([3])

print a ^ b # 排他的論理和 set([1, 2, 4])

辞書型を使うと、key, valueでデータを管理できる。

データをkeyとvalueで管理したい場合は、辞書型を使えます。結果が入れた順でもなく、ソートもされていなくて、少し困惑します。。。

# 定義

a = {"a1":10, "a2":20, "a3":3}

print a["a2"] # 20

print a.keys() # ['a1', 'a3', 'a2']

print a.values() # [10, 3, 20]

print a.items() # [('a1', 10), ('a3', 3), ('a2', 20)]

 forループは、リストを渡して実行できる。

pythonのforループはリストを渡して実行するようです。他の言語のようにiを初期化して、値を判定、インクリメントって形ではないようです。ここは最初困惑した部分で、rangeをよく使っている理由も分かりました。(サンプルは複数行にわたるため1行ずつ実行しないと上手くいきません)

# リストを順に出力

lists = [3, 5, 2, 10]

for list in lists:

    print list

# rangeを使えば、他の言語のiを使う処理と同じようなことができる

for r in range(5):

    print r # 0, 1, 2, 3, 4

 辞書型でforループする

辞書型でitemsやkeys,valuesでループできます。ループの時の解説は、iterkeysなどを使ってましたが、結果は同じ。ただiterkeysはイテレータ用のオブジェクトが返ってくるようですが、詳細はよくわかってません。。。

dic = {"a1":10, "a2":20, "a3":3}

for d in dic.keys():

    print d # a1, a3, a2

for d in dic.iterkeys():

    print d # a1, a3, a2

 map, lambdaでリストの処理を簡潔に記述する

mapやlambdaを使うことでリストの処理を簡潔に記述できるようです。まだ慣れないのですが、pythonを使っているとよく見る処理なので、覚えていく必要があります。

mapはリストを関数でまとめて処理。lambdaは無名関数でmapの関数定義を省略できたりするようです。

# map

def double(x):

    return x * x

print map(double, [2, 3, 1]) # 4, 9, 1

# lambdaを使用

print map(lambda x: x*x, [2, 3, 1]) # 4, 9, 1

pythonのドキュメント

mathやrandomなど便利なライブラリが提供されているので、そのドキュメントは、公式サイトのライブラリドキュメントを参照すればよいようです。

使い始めはドキュメントを読もうにも膨大な量で、どこを参照すればよいのかわかりませんが、ドットインストールではドキュメントの紹介もしているため、ためになります。

まとめ

ドットインストールのpython入門を一度視聴して、とてもためになりました。他の言語を知っていれば、初めての言語でもネットで少し調べながらやればコーディングできますが、基本やお作法を学ぶために入門編を一度やっておくことは効果的だと思います。知らない機能だったり、特徴的な機能を垣間見れます。特に一度自分で色々試してから読むことでさらに効果があると思います。