Pythonで複数の配列を同時にソート
Python使ってて、複数の配列を同時にソートしたくなることありますね。
たとえば、キー配列をもとに値配列をソートしたいときとか…
そんなときはzip
をうまくつかってください。
a = [2, 0, 1] b = ["a", "b", "c"] # zipで二つの配列を統合 c = zip(a, b) c.sort() # 統合していた配列をもとに戻す a, b = zip(*c) print(a) print(b) # (0, 1, 2) # ('b', 'c', 'a')
結果を見ると配列a
をキーにしてソートされていることがわかります。
結果がタプルで得られてることに注意しましょう。
ちなみに、配列が3つ以上でもzip(a, b, c, …)
と増やしていけばOKです。
もしソートに使うキー配列を変えたい場合には、itemgetter()
を使うとよいです。
from operator import itemgetter a = ["a", "b", "c"] b = [2, 0, 1] c = zip(a, b) # itemgetterには何番目の配列をキーにしたいか渡します c.sort(key=itemgetter(1)) a, b = zip(*c) print(a) print(b) # ('b', 'c', 'a') # (0, 1, 2)
これでいくらでも好きにソートできますね!以上!