Pythonのsortで1の次に10がくる問題

7月 27, 2020

下のリストがあったとき,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']

とすれば良いようだ.

stackoverflow.com

だけど,ファイル名の先頭に付いた番号順にソートしたいときには,この方法は使えない.

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'

自分で関数をゴリゴリ書くしかないのか…

もっとスマートな方法は無いのかなー?

Python

Posted by vastee