やはり先人の知恵に頼るべき.
もっと楽にやる方法が有るかもしれないがとりあえずメモ.
リスト.sort
でもsorted(リスト)
でも良いと思うがsortedのほうが元のリストを変更しないのでここではsorted()を用いる
問題
以下のように2つのリストがある時,片方のリストの値を用いてもう片方のリストをソートしたい.
X = ["a", "b", "c", "d", "e", "f"]
Y = [ 0, 5, 3, 1, 4, 2]
Yでソートするなら答えはこうなるべき.
['a', 'd', 'f', 'c', 'e', 'b']
最短解[1]
多分これが一番早そう.
Z = [x for _,x in sorted(zip(Y,X))]
print(Z)
やっていることは,
- ZIPで数値と文字列を結合
- sortedで最初のYの値を見てソート
- 2番目の要素だけ取り出す
いろいろと参考になる.こういうのが即浮かばないうちはPython使いにはなれんのか.
Reference[2]読んで考えて書いたやつ
自分で考えて書くと可読性が低い.
deco = zip(X,Y)
sorted(deco,key=lambda deco:deco[:][1])
keyの後ろにはXの要素(アルファベット)を与えるとYの値(順序に使う数値)を出すような関数を書けば良い.
従ってzipでXとYをくっつけてY側の値を取り出すという関数にした.
文献
- [1] クールな解決策の元記事
- [2] Opencv Reference