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)

これでいくらでも好きにソートできますね!以上!