Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Pythonのソート

ソートでハマっています。
言語:Python 3

file_list = ['0001_12345.txt', '0001_9.txt', '0001_123456.txt']
file_list.sort()
print(file_list)

結果
['0001_12345.txt', '0001_123456.txt', '0001_9.txt']

上記のコードでソートしても何故か思った通りにソートされません。

下のようにならないのは何故でしょうか?
['0001_9.txt', '0001_12345.txt', '0001_123456.txt']

0

1Answer

pythonのsortは辞書式順序だからです。

file_list = ['あいう', 'あい', '', '', 'いう', 'あう']

とした場合のソートの結果が['あ', 'あい', 'あいう', 'あう', 'い', 'いう']となるように辞書順です。
今回の場合、ファイル名が「0001_xxxxx.txt」が決まっているとわかっているならば

file_list = ['0001_12345.txt', '0001_9.txt', '0001_123456.txt', '0001_5.txt']
file_list.sort(key = lambda x: int(x[5:-4]))
print(file_list) #['0001_5.txt', '0001_9.txt', '0001_12345.txt', '0001_123456.txt']

のようにすればうまくいきます。
ただこの場合0002_xxxx.txtのようなパターンには対応できないので、このような可能性がある場合は別途対応する必要があります。

1Like

Comments

  1. 早速のご返答ありがとうございます。
    参考にさせていただきます。

Your answer might help someone💌