主にプログラミングに関して。Python, .NET Framework(C#), JavaScript, その他いくらか。
記事にあるサンプルやコードは要検証。使用に際しては責任を負いかねます

スポンサーサイト

                
tags:
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

文字と数字が混在しているときのソート

                
tags:
pythonでリストをソートする時、基本的に数字は若い順になる。これを逆に数字の大きいほうから並べたい場合、リバースを使えば目的は達成できる。しかし、文字と数字が混在していた場合どうだろう。

ターゲットのリスト
['muse0', 'muse1', 'muse2', 'apc0', 'apc2', 'apc3']

上のリストをsortedで並べ替えると、
['apc0', 'apc2', 'apc3', 'muse0', 'muse1', 'muse2']

数字の大きいほうから並べるためにこれをリバースする。するとアルファベットが逆順になってしまう。
['muse2', 'muse1', 'muse0', 'apc3', 'apc2', 'apc0']

というわけで文字はa→z、数字は大→小の順番でソートできるようにしてみる。大小を逆転させた数字をタグ付けして文字と数字の間に挿入する。ソートした跡に、タグごと逆転した数字を消す。


import re

list = ['muse0', 'muse1', 'muse2', 'apc0', 'apc2', 'apc3']

#逆転した数字を挿入した新しいリストを作る
newlist=[]
for p in list:
str = re.findall('[a-z]*', p)[0]
num = re.findall('[0-9]', p)[0]
revnum='%d' %(9-int(num))
newstr = str + revnum + num
newlist.append(newstr)

#ソート
sortedlist=sorted(newlist)

#逆転した数字を消す
for p in range(len(sortedlist)):
sortedlist[p]=re.sub('<rev>(.*?)</rev>', '', sortedlist[p])


結果
>>> newlist
['muse<rev>9</rev>0',
'muse<rev>8</rev>1',
'muse<rev>7</rev>2',
'apc<rev>9</rev>0',
'apc<rev>7</rev>2',
'apc<rev>6</rev>3']
>>> sortedlist
['apc3', 'apc2', 'apc0', 'muse2', 'muse1', 'muse0']

            

コメントの投稿

非公開コメント

プロフィール

Matoba

Author:Matoba

最新記事
リンク
作ったものなど
月別アーカイブ
カテゴリ
タグリスト

検索フォーム
Amazon
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。