ページへ戻る
− Links
印刷
Python/ソート
の編集 ::
NJF Wiki
xpwiki
:
Python
/
ソート
の編集
# a928baaf の編集
ページ内容:
*並び替えに細かな条件を指定する [#a928baaf] sorted関数やリストのsortメソッドには「key」という引数があり、これを指定すると細かな並び替え条件を指定できます。 例えば、次のようなリストの並び替えを考えます。 original_list = ["Ab32","ab21","aB13"] sorted_list = sorted(original_list) print(sorted_list) 結果 ['Ab32', 'aB13', 'ab21'] 大文字の方が文字コードでは値が小さいため、上のような結果になります。 これを大文字小文字を無視して並べ替えるには以下のようにします。 sorted_list = sorted(original_list,key=str.lower) print(sorted_list) 結果 ['aB13', 'ab21', 'Ab32'] str.lowerは引数を小文字にして返すメソッドです。 大文字小文字を無視するためにすべて小文字にしているわけです。 もちろん、全て大文字にするstr.upperメソッドを使っても同じ結果が得られます。 このようにkeyには何か関数やラムダ式を指定します。 指定した関数は引数として並べ替える要素が与えられ、値を返すとその結果に応じて並び替えらたリストなどがsortやsorted関数の結果となります。 例えば上のリストを4文字目で並べ替えるには以下のようにします。 sorted_list = sorted(original_list,key=lambda x: x[3]) print(sorted_list) 結果 ['ab21', 'Ab32', 'aB13'] ここではラムダ式を使いましたが、「何番目の要素で並び替える」という処理はよく使うので、Pythonにはそれに対応した「itemgetter」というメソッドが用意されています。 from operator import itemgetter sorted_list = sorted(original_list,key=itemgetter(3)) print(sorted_list) これで上のラムダ式と全く同じ結果が得られます。 こちらの方が記述が簡潔になり、かつ高速で動作します。 また、itemgetterは複数の引数を与えると、その順番に優先順位をつけてソートしてくれます。 例えば、一番目でまず並べ替え、同じ順位の間では四番目で並べ替えるには以下のようにします。 sorted_list = sorted(original_list,key=itemgetter(0,3)) print(sorted_list) 結果 ['Ab32', 'ab21', 'aB13'] この例では文字列を使いましたが、リストやタプルなど、数字のインデックスでアクセスできるオブジェクトなら全く同様にソート可能です。 また、sorted関数だけではなくリストのsortメソッドにも同じ方法が使えます。 クラスオブジェクトのプロパティで並べ替えるには「attrgetter」を使います。 例えば、「name」というプロパティをもつオブジェクトのリストを並べ替えるのは以下のようなコードになります。 from operator import attrgetter 略 sorted_list = sorted(original_list, key=attrgetter('name'))
編集の要約:
Q & A 認証:
ページ更新時は次の質問にお答えください。(プレビュー時は必要ありません)
Q:
「京都」の読みがな?(ひらがなで)
A:
お名前:
タイムスタンプを変更しない
テキスト整形のルールを表示する
[1]
Links list
(This host) = https://njf.jp
(This host)
/cms/modules/xpwiki/?cmd=edit&help=true&page=Python%2F%E3%82%BD%E3%83%BC%E3%83%88