ページへ戻る
印刷
Python/ソート
をテンプレートにして作成 ::
NJF Wiki
xpwiki
:Python/ソート をテンプレートにして作成
開始行:
*リストのソート
リストの内容を変更する、いわゆる「破壊的」なソートするに...
original_list = [2,1,4,3,5]
original_list.sort()
print(original_list)
結果
[1, 2, 3, 4, 5]
リストの内容を変更せず、ソートされたコピーを作成するにはs...
original_list = [2,1,4,3,5]
sorted_list = sorted(original_list)
print(original_list)
print(sorted_list)
結果
[2, 1, 4, 3, 5]
[1, 2, 3, 4, 5]
*リストを降順でソート
降順でソートするには引数に「reverse = True」を指定します。
original_list = [2,1,4,3,5]
original_list.sort(reverse = True)
print(original_list)
sorted関数についても同様です。
original_list = [2,1,4,3,5]
sorted_list = sorted(original_list, reverse = True)
print(original_list)
print(sorted_list)
結果
[2, 1, 4, 3, 5]
[5, 4, 3, 2, 1]
*辞書型オブジェクトのキーでソート
sorted関数は他のイテラブルにも使えます。例えば辞書型オブ...
original_dict = {2:"B",4:"D",1:"A",3:"C"}
sorted_dict_key = sorted(original_dict)
print(original_dict)
print(sorted_dict_key)
結果
{2: 'B', 4: 'D', 1: 'A', 3: 'C'}
[1, 2, 3, 4]
対応する値を含まないキーだけ並び替えたリストが返ることに...
なぜなら、もとの辞書型オブジェクトとキーを使えば対応する...
例えば、上の例で並び替えたキーと対応する値を順番に表示す...
for k in sorted_dict_key:
print("key:%s, value:%s" % (k,original_dict[k]))
結果
key:1, value:A
key:2, value:B
key:3, value:C
key:4, value:D
**キーでソートするならリストにしない方が良い
ところで、ネット上でPythonの辞書型オブジェクトのソートを...
sorted_dict_list = sorted(original_dict.items())
print(sorted_dict_list)
結果
[(1, 'A'), (2, 'B'), (3, 'C'), (4, 'D')]
このやり方はあまりよくありません。
なぜなら、もとの辞書型オブジェクトの中と並べ替えたリスト...
この方法では、メモリを無駄に消費するのはもちろん、ソート...
しかもリストの方は中がタプルのため値が変更できません。
そのため、もとの辞書型オブジェクトの値を変更した上で、キ...
並べ替えたキーだけ保持する方法なら、もとの辞書型オブジェ...
ちなみに、一度リスト化して並べ替える方法がGoogle検索の上...
*並び替えに細かな条件を指定する
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には何か関数やラムダ式を指定します。
指定した関数は引数として並べ替える要素が与えられ、値を返...
例えば上のリストを4文字目で並べ替えるには以下のようにしま...
sorted_list = sorted(original_list,key=lambda x: x[3])
print(sorted_list)
結果
['ab21', 'Ab32', 'aB13']
ここではラムダ式を使いましたが、「何番目の要素で並び替え...
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メソッドにも同じ...
クラスオブジェクトのプロパティで並べ替えるには「attrgette...
例えば、「name」というプロパティをもつオブジェクトのリス...
from operator import attrgetter
略
sorted_list = sorted(original_list, key=attrgetter('name...
終了行:
*リストのソート
リストの内容を変更する、いわゆる「破壊的」なソートするに...
original_list = [2,1,4,3,5]
original_list.sort()
print(original_list)
結果
[1, 2, 3, 4, 5]
リストの内容を変更せず、ソートされたコピーを作成するにはs...
original_list = [2,1,4,3,5]
sorted_list = sorted(original_list)
print(original_list)
print(sorted_list)
結果
[2, 1, 4, 3, 5]
[1, 2, 3, 4, 5]
*リストを降順でソート
降順でソートするには引数に「reverse = True」を指定します。
original_list = [2,1,4,3,5]
original_list.sort(reverse = True)
print(original_list)
sorted関数についても同様です。
original_list = [2,1,4,3,5]
sorted_list = sorted(original_list, reverse = True)
print(original_list)
print(sorted_list)
結果
[2, 1, 4, 3, 5]
[5, 4, 3, 2, 1]
*辞書型オブジェクトのキーでソート
sorted関数は他のイテラブルにも使えます。例えば辞書型オブ...
original_dict = {2:"B",4:"D",1:"A",3:"C"}
sorted_dict_key = sorted(original_dict)
print(original_dict)
print(sorted_dict_key)
結果
{2: 'B', 4: 'D', 1: 'A', 3: 'C'}
[1, 2, 3, 4]
対応する値を含まないキーだけ並び替えたリストが返ることに...
なぜなら、もとの辞書型オブジェクトとキーを使えば対応する...
例えば、上の例で並び替えたキーと対応する値を順番に表示す...
for k in sorted_dict_key:
print("key:%s, value:%s" % (k,original_dict[k]))
結果
key:1, value:A
key:2, value:B
key:3, value:C
key:4, value:D
**キーでソートするならリストにしない方が良い
ところで、ネット上でPythonの辞書型オブジェクトのソートを...
sorted_dict_list = sorted(original_dict.items())
print(sorted_dict_list)
結果
[(1, 'A'), (2, 'B'), (3, 'C'), (4, 'D')]
このやり方はあまりよくありません。
なぜなら、もとの辞書型オブジェクトの中と並べ替えたリスト...
この方法では、メモリを無駄に消費するのはもちろん、ソート...
しかもリストの方は中がタプルのため値が変更できません。
そのため、もとの辞書型オブジェクトの値を変更した上で、キ...
並べ替えたキーだけ保持する方法なら、もとの辞書型オブジェ...
ちなみに、一度リスト化して並べ替える方法がGoogle検索の上...
*並び替えに細かな条件を指定する
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には何か関数やラムダ式を指定します。
指定した関数は引数として並べ替える要素が与えられ、値を返...
例えば上のリストを4文字目で並べ替えるには以下のようにしま...
sorted_list = sorted(original_list,key=lambda x: x[3])
print(sorted_list)
結果
['ab21', 'Ab32', 'aB13']
ここではラムダ式を使いましたが、「何番目の要素で並び替え...
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メソッドにも同じ...
クラスオブジェクトのプロパティで並べ替えるには「attrgette...
例えば、「name」というプロパティをもつオブジェクトのリス...
from operator import attrgetter
略
sorted_list = sorted(original_list, key=attrgetter('name...
ページ名: