Pythonでの配列の使い方メモ。
配列の宣言・要素の追加
配列を宣言
colors = ['red', 'green']
要素を追加
appendメソッドを使って要素を追加します。
colors = [] colors.append('red') print colors # ['red'] colors.append('green') print colors # ['red', 'green']
要素の取得
index値を指定して取得
colors = ['red', 'green', 'blue', 'yellow'] print colors[0] # red print colors[2] # blue
最後の要素を取得
index値として-1を指定すると最後の要素を、更にマイナス値を増やすと逆順に要素を取得します。
colors = ['red', 'green', 'blue', 'yellow'] print colors[-1] # yellow print colors[-2] # blue
配列の結合
結合結果を上書き
extendメソッドを使って2つの配列を結合します。
colors1 = ['red', 'green'] colors2 = ['blue', 'yellow'] # 配列1に配列2を結合 colors1.extend(colors2) print colors1 # ['red', 'green', 'blue', 'yellow']
新規配列変数に結合する
元の配列値は残したい場合。配列を加算して2つの配列を結合します。
colors1 = ['red', 'green'] colors2 = ['blue', 'yellow'] # 配列1と配列2を結合した配列3を生成 colors_new = colors1 + colors2 print colors_new # ['red', 'green', 'blue', 'yellow']
配列要素の引き算
old_ids = [1, 2, 4, 5] new_ids = [1, 3, 4] print list(set(old_ids) - set(new_ids)) # [2, 5] print list(set(new_ids) - set(old_ids)) # [3]
配列要素分ループさせる
要素のみ取得するループ
colors = ['red', 'green', 'blue', 'yellow'] for color in colors: print color # red # green # blue # yellow
要素とインデックス値を取得するループ
colors = ['red', 'green', 'blue', 'yellow'] for i, color in enumerate(colors): print i, '-->', color # 0 --> red # 1 --> green # 2 --> blue # 3 --> yellow
逆順ループ
colors = ['red', 'green', 'blue', 'yellow'] for color in reversed(colors): print color # yellow # blue # green # red
配列要素が条件を満たしているか判定
1要素でもTrueが存在しているかの判定はany関数、全ての要素がTrueかどうかの判定はall関数で行う。
test = [True, False, True] any(test) # True all(test) # False
実際のコード上だと、もう少し複雑な元データになると思うので、まずbool配列に変換してからany、all関数を実行する。
test = { 'inoue':73, 'suzuki':65, 'tanaka':80, 'yamada':51, } any([v >= 60 for v in test.values()]) # True all([v >= 60 for v in test.values()]) # False
配列要素を同じ値で増やす
item_ids = [24] * 5 print item_ids # [24, 24, 24, 24, 24]
値が挿入されるindex値を調べる
ソートされている配列に新しい要素値を挿入すると、どこの位置(index)に入るかを調べるにはbisect関数を使用する。
2分探索で調べるので高速。
import bisect scores = [5, 10, 50, 100] new_score = 55 index = bisect.bisect(scores, new_score) print index # 3
実際に要素を入れ込む場合はbisect.insort関数を使う。
import bisect scores = [5, 10, 50, 100] new_score = 55 bisect.insort(scores, new_score) print scores # [5, 10, 50, 55, 100]