2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Python】数値が混在した文字列のリストを自然な順序でソートする

Posted at

はじめに

Pythonでファイル名のリストなどを通常のソートを使って整列すると以下のようになってしまいます。

サンプルコード
file_list = ["file_9","file_12","file_40","file_29","file_3"]

print("ソート前:", file_list)
file_list = sorted(file_list)
print("ソート後:", file_list)

実行結果
ソート前: ['file_9', 'file_12', 'file_40', 'file_29', 'file_3']
ソート後: ['file_12', 'file_29', 'file_3', 'file_40', 'file_9']  <-- 意図しない整列

それを解消するための関数を作ります。

実装

reモジュールを使って実装します。

import re

def natural_sort(text):
    return [int(c) if c.isdigit() else c for c in re.split(r'(\d+)', text)]
    

実行例

サンプルコード

import re

def natural_sort(text):
    return [int(c) if c.isdigit() else c for c in re.split(r'(\d+)', text)]
    
file_list = ["file_9","file_12","file_40","file_29","file_3"]

print("ソート前:", file_list)
file_list = sorted(file_list)
print("改良前:", file_list)
file_list = sorted(file_list, key=natural_sort)
print("改良後:", file_list)

実行結果
ソート前: ['file_9', 'file_12', 'file_40', 'file_29', 'file_3']
改良前: ['file_12', 'file_29', 'file_3', 'file_40', 'file_9']
改良後: ['file_3', 'file_9', 'file_12', 'file_29', 'file_40']

おわりに

これでPythonを使ったファイル整理が捗りそうですね。

2
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?