Python2 関するするメモ
演算子に関する注意
- インクリメント(++)とデクリメント(--)がない
- 真偽値(Boolean)の比較演算子は and or not である(真偽値定数は True と False (頭文字が大文字))
標準入力
raw_input() という標準実装されてる関数(ビルトイン関数)を使うのが便利
raw_input() は1行を読み込む
構文(ブロックに関して)
ブロックは水平タブで表現される、同じタブインデントが続くと同一ブロックとみなされる
ブロックの開始は行末のコロンで判定する、ブロックの終わりはインデントを下げればよい
# 例 if文
if a == b:
print 'a equal b!'
elif a < b:
print 'a less than b!'
else:
print 'a greater than b !'
# 例 関数定義
def f(a, b):
c = a * b
return c
変数
# 代入式をそのまま書けば変数が作られる
a = 10 # 数値
b = [] # 配列(シーケンス)
c = 'hello' # 文字列
# リストを使った代入もできる
(a, b, c) = (10, [], 'hello')
print a # 10
print b # []
print c # 'hello'
# 関数内からグローバル変数を参照するには global キーワードを使う
a = 10
def f():
global a
return a * 3
def g():
return a * 3 # このように globalを指定しないと未定義変数とみなされエラーになる
配列(シーケンスと呼ぶらしい)
# 空の配列
a = []
# [0, 1, 2, 3] の内容の配列
a = range(4)
# [1, 2, 3, 4] の内容の配列
a = [1, 2, 3, 4]
# もしくは
a = list( (1, 2, 3, 4) )
# もしくは
a = range(1, 5)
# もしくは
a = list(i + 1 for i in xrange(4)) # これはちょっと構文がまだ分かってないので何で出来るのかわからん
# [0, 0, 0, 0] の内容の配列
a = [0] * 4
# 上記のはオブジェクトだと参照アドレスがコピーされるので注意
a = [[]] * 4 # [[], [], [], []]が作られる
a[0].append(1) # aの0番目のリストに1を追加する、aの各要素は同じ配列への参照がコピーされているので
# [[1], [1], [1], [1]] となってしまう
a = list([] for i in xrange(4))
a[0].append(1) # これならば[[1], [], [], []] と別々の配列オブジェクトが格納されることになる
a = [[] for i in range(4)] # これでもいける
# 配列の部分参照(?)
a = range(10)
print a[2] # 2 が表示される
print a[2:2] # [] が表示される
print a[2:3] # [2] が表示される
print a[2:4] # [2, 3] が表示される
a = range(5)
a[2] = 9 # [0, 1, 9, 3, 4] になる
a = range(5)
a[2:2] = [9] # [0, 1, 9, 2, 3, 4] になる
a = range(5)
a[2:3] = [9] # [0, 1, 9, 3, 4] になる
a = range(5)
a[2:3] = [9, 10] # [0, 1, 9, 10, 3, 4] になる
a = range(5)
a[2:3] = [9] # [0, 1, 9, 3, 4] になる
a = range(5)
a[2:3] = [] # [0, 1, 3, 4] になる
a = range(5)
a[2:4] = [] # [0, 1, 4] になる
a = range(5)
a[2:4] = [9] # [0, 1, 9, 4] になる
a = range(5)
a[2:4] = [9, 10] # [0, 1, 9, 10, 4] になる
a = range(5)
a[2:4] = [9, 10, 11] # [0, 1, 9, 10, 11, 4] になる
# 配列の操作
a = []
a.append(1) # a は [1]
a.append(2) # a は [1, 2]
a.insert(0, 3) # a は [3, 1, 2]
a.pop(0) # a は [1, 2]、popの戻り値は 3
# マッピング
def f(x):
return x * 2
a = map(f, xrange(4)) # [0, 2, 4, 6] になる
b = map(lambda x: x * 2, xrange(4)) # これでも同様に [0, 2, 4, 6] になる
# フィルタ
def f(x):
if x % 2 == 0:
return x
a = filter(f, xrange(8)) # [2, 4, 6] になる (注意 0は含まれない)
# reduce (結果に順次処理してく感じ?)
def f(a, b):
return a * b
a = list( (1, 2, 3, 4) )
b = reduce(f, a) # ( (1 * 2) * 3 ) * 4 = 24 になる
rangeとxrangeについて
rangeは(指定範囲の値を持つ)配列を作り、その配列を返す
xrangeはrangeで初期化される配列の各要素の値を作りだす
配列を作るのではなく n番目の要素の値を要求すると rangeで作られるだろう配列のn番目の要素の値を計算して返す(と思われる)
擬似的で実態のない仮想配列を作る、あたかもrange配列があるかのように振舞う
a = range(5) # [0, 1, 2, 3, 4] の配列を作る (0以上 5未満の数で構成される配列)
b = range(1, 6) # [1, 2, 3, 4, 5] の配列を作る (1以上 6未満の数で構成される配列)
c = range(1, 10, 2) # [1, 3, 5, 7, 9] の配列を作る (1以上 10未満の数で1から2個飛びの数で構成される配列)
c = range(1, 10, 3) # [1, 4, 7] の配列を作る (1以上 10未満の数で1から3個飛びの数で構成される配列)
# rangeとxrange
for i in range(5): # [0, 1, 2, 3, 4] の配列が作られそれぞれの要素に対してforがかけられる
print i
for i in xrange(5): # forでここに戻るたびに該当する要素の値を計算して返す
print i
a = xrange(4)
print a # [0, 1, 2, 3]は表示されず、xrange(4)というオブジェクトとして表示される
for文
# 10回繰り返し (0から9が表示される)
for i in xrange(10):
print i
# aの内容を順番に表示する(for-each文相当?)
a = list( (1, 3, 5, 10, 20) )
for i in a:
print i
最終更新:2014年10月13日 07:59