LoginSignup
2
1

More than 5 years have passed since last update.

Python リストを参照してリストをソート

Last updated at Posted at 2018-11-04

やはり先人の知恵に頼るべき.
もっと楽にやる方法が有るかもしれないがとりあえずメモ.

リスト.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側の値を取り出すという関数にした.

文献

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1