Pythonのsortで1の次に10がくる問題
下のリストがあったとき,sortを使って昇順に並び替えを行うと,困ったことが起きる.
list1 = ["1","10","3","22","23","4","2","200"] list1.sort() list1 >> ['1', '10', '2', '200', '22', '23', '3', '4']
そう,1の次に2が来ず,10が来てしまうのだ…
この問題を回避するには,
list1 = ["1","10","3","22","23","4","2","200"] list1.sort(key=int) list1 >> ['1', '2', '3', '4', '10', '22', '23', '200']
とすれば良いようだ.
だけど,ファイル名の先頭に付いた番号順にソートしたいときには,この方法は使えない.
list1 = ["1_a","10_a","3_a","22_b","23_b","4_c","2_c","200_d"] list1.sort(key=int) >>Traceback (most recent call last): File "<ipython-input-9-bd2e95a2a652>", line 1, in <module> list1.sort(key=int) ValueError: invalid literal for int() with base 10: '1_a'
自分で関数をゴリゴリ書くしかないのか…
もっとスマートな方法は無いのかなー?
ディスカッション
コメント一覧
まだ、コメントがありません