サブロウ丸

主にプログラミングと数学

Python コーディング(基) list編

list操作(基)sortの話です.

sort
sortsortedの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の長さが異なる場合は、短い方に合わせている)