python2で文字列と数値が混在したリストをsortする
Linuxで言うところのコレ.バージョンのソートっぽいもの.
$ echo -e "foo1\nfoo2\nfoo11\nfoo20" | sort -V foo1 foo2 foo11 foo20
もちろん普通のsortでは上手くいかない.
$ echo -e "foo1\nfoo2\nfoo11\nfoo20" | sort -n foo1 foo11 foo2 foo20
このバージョンのソートには文字列と数値が入り混じるので,
python2の組み込みのsort,sortedで無理やりソートしたときのメモ.
def numeric_cmp(x, y): return cmp(int(x[3:]), int(y[3:])) hoge = ['foo1', 'foo11', 'foo2', 'foo20'] hoge.sort(cmp=numeric_cmp) # もしくは sorted(hoge, cmp=numeric_cmp)
python2系だと,ユーザ側で比較関数を定義出来るので,それを利用.
単に比較する数値のところだけをスライシングして,intで数値にした後に比較する関数を定義してソートするだけ.
無視する文字列の長さが決まっていて固定的ならこれでいい気はしますが,長さが変わるような可変的な場合はどうすればいいか分からないですね….