考え中

営業なのに営業力が皆無のためゲーム作って癒やされたい。

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で数値にした後に比較する関数を定義してソートするだけ.

無視する文字列の長さが決まっていて固定的ならこれでいい気はしますが,長さが変わるような可変的な場合はどうすればいいか分からないですね….