ゼロ埋め無しのリストをソートする

 

通常のソートでは、ゼロ埋めをしていない数字を含む文字列のリストをソートする場合、期待通りの並び順になってくれません。

getList=["test_20_geo","test_100_geo","test_001_geo","test_10_geo","test_011_geo","test_2_geo"]
print sorted(getList)

#['test_001_geo','test_011_geo', 'test_100_geo','test_20_geo','test_2_geo']




ソートをする前に、文字と数字に分解することで多重キーによるソートを可能にします。

正規表現で re.split("(\d+)","文字列")と分割することで文字部分と数字部分に分けることができます。




とりあえずリストをぶち込んで並び替える関数を作りました。

getList=["test_20_geo","test_100_geo","test_001_geo","test_10_geo","test_011_geo","test_2_geo"]
print sortedStringList(getList)

#['test_001_geo','test_2_geo','test_10_geo','test_011_geo','test_20_geo','test_100_geo']

このように、正規表現で文字と数字を分けてから多重キーを使用することで、バラバラな文字列でも数字順に並べ替えが可能になります。




正規表現について参考にさせていただきました。 uxmilk.jp




thx:[@3D_manu]多重キーのアドバイスありがとうございました。