list操作(基)sortの話です.
sort
sort
とsorted
の2種類. 使い方その他は下記.
a = [2, 3, 4, 1] sorted(a) > [1, 2, 3, 4] #aのsort後のlistが出力される a > [2, 3, 4, 1] #aに変化はなし a.sort() a > [1, 2, 3, 4] #a自体がsortされている. sorted(a, reverse=True) > [4, 3, 2, 1] #降順にsort def func(x): return x%4 sorted(a, key=func) > [4, 1, 2, 3] #keyに関数を指定できる b = [(1, 3), (2, 5), (3, 8), (3, 5)] sorted(b, key=lambda x: x[0]) > [(1, 3), (2, 5), (3, 8), (3, 5)] #無名関数(lambda)をkeyに使う(この場合タプルの第1成分でsortしている sorted(b, key=lambda x: (x[0], x[1])) > [(1, 3), (2, 5), (3, 5), (3, 8)] #第1成分でsortした後に第2成分でsortしている #仕組みとしてはタプルの比較を行っている #例えば (3, 5) < (3, 8) !!! c = list('apple') c > ['a', 'p', 'p', 'l', 'e'] #文字列をlistに変換できる sorted(c) > ['a', 'e', 'l', 'p', 'p'] #文字のsortも可能
スライス
pythonらしいlistのいじり方です.
a = [0, 1, 2, 3, 4] a[1:3] > [1, 2] # index1~2までの要素のlistを出力 a[1:] > [1, 2, 3, 4] # index1~の要素のlistを出力 a[:3] > [0, 1, 2] #index2以下の要素のlistを出力 a[:-1] > [0, 1, 2, 3] #index-1以下の要素のlistを出力 a[:] > [0, 1, 2, 3, 4] #list全体を出力 a[1:4:2] > [1, 3] #index1~3の中で1つ飛ばしに要素を取ってきてlistとして出力 a[::2] > [0, 2, 4] #偶数indexのlistを出力 a[1::2] > [1, 3] #奇数indexのlistを出力 a[::-1] > [4, 3, 2, 1, 0] #indexを逆順で出力 a[1:2] > [1] a[1:2] = [10] a > [0, 10, 2, 3, 4] #スライス部分での代入も可能 a[1:2] = ['HEY', 'OK!'] a > [0, 'HEY!', 'OK!', 2, 3, 4] #代入するlistの長さが変わっても良い a = list(range(10)) a > [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] a[::2] = ['even']*5 a > ['even', 1, 'even', 3, 'even', 5, 'even', 7, 'even', 9] #スライス切り取りまとめて代入OK
リストの結合
a = [0, 1, 2] b = [3, 4, 5] a + b > [0, 1, 2, 3, 4, 5] a + ['WALL'] + b > [0, 1, 2, 'WALL', 3, 4, 5]
要素ごとの和
listをベクトルとしてみなした時の
listの和
a = [0, 1, 2] b = [3, 4, 5] [x+y for x, y in zip(a, b)] > [3, 5, 7] # zip はindex0から同時にa, bの要素の値を取得する.(listの長さが異なる場合は、短い方に合わせている)