1: 2019-04-23 (火) 19:18:56 njf[4] [5] [6] | 現: 2019-04-23 (火) 19:44:20 njf[4] [7] [8] | ||
---|---|---|---|
Line 4: | Line 4: | ||
original_list = [2,1,4,3,5] | original_list = [2,1,4,3,5] | ||
+ | |||
original_list.sort() | original_list.sort() | ||
+ | |||
print(original_list) | print(original_list) | ||
Line 16: | Line 16: | ||
original_list = [2,1,4,3,5] | original_list = [2,1,4,3,5] | ||
+ | |||
sorted_list = sorted(original_list) | sorted_list = sorted(original_list) | ||
+ | |||
print(original_list) | print(original_list) | ||
print(sorted_list) | print(sorted_list) | ||
Line 32: | Line 32: | ||
original_list = [2,1,4,3,5] | original_list = [2,1,4,3,5] | ||
+ | |||
original_list.sort(reverse = True) | original_list.sort(reverse = True) | ||
+ | |||
print(original_list) | print(original_list) | ||
Line 40: | Line 40: | ||
original_list = [2,1,4,3,5] | original_list = [2,1,4,3,5] | ||
+ | |||
sorted_list = sorted(original_list, reverse = True) | sorted_list = sorted(original_list, reverse = True) | ||
+ | |||
print(original_list) | print(original_list) | ||
print(sorted_list) | print(sorted_list) | ||
Line 56: | Line 56: | ||
original_dict = {2:"B",4:"D",1:"A",3:"C"} | original_dict = {2:"B",4:"D",1:"A",3:"C"} | ||
+ | |||
sorted_dict_key = sorted(original_dict) | sorted_dict_key = sorted(original_dict) | ||
+ | |||
print(original_dict) | print(original_dict) | ||
print(sorted_dict_key) | print(sorted_dict_key) | ||
Line 87: | Line 87: | ||
sorted_dict_list = sorted(original_dict.items()) | sorted_dict_list = sorted(original_dict.items()) | ||
+ | |||
print(sorted_dict_list) | print(sorted_dict_list) | ||
Line 97: | Line 97: | ||
なぜなら、もとの辞書型オブジェクトの中と並べ替えたリストの中に同じ値が含まれており、データが二重化してしまうからです。 | なぜなら、もとの辞書型オブジェクトの中と並べ替えたリストの中に同じ値が含まれており、データが二重化してしまうからです。 | ||
- | この方法では、メモリを無駄に消費するのはもちろん、ソートしてからキーに対応した値を変更しようとすると、並び替えたリスト(sorted_dict_list)と、もとの辞書型オブジェクト(original_dict)の値の両方を変更する必要が出てきます。 | + | この方法では、メモリを無駄に消費するのはもちろん、ソートしてからキーに対応した値を変更しようとすると、プログラムの目的によっては、値の整合性をとるために並び替えたリスト(sorted_dict_list)と、もとの辞書型オブジェクト(original_dict)の値の両方を変更しなければならなくなります。 |
しかもリストの方は中がタプルのため値が変更できません。 | しかもリストの方は中がタプルのため値が変更できません。 | ||
Line 105: | Line 105: | ||
並べ替えたキーだけ保持する方法なら、もとの辞書型オブジェクトを変更するだけで良く、そのような処理は必要ありません。 | 並べ替えたキーだけ保持する方法なら、もとの辞書型オブジェクトを変更するだけで良く、そのような処理は必要ありません。 | ||
- | ただし、キーではなく対応する値の方で並べ替えるなら一度リスト化する必要があります。 | + | ちなみに、一度リスト化して並べ替える方法がGoogle検索の上位に現れるのは日本語のサイトの検索結果です。英語のサイトの検索結果の上位サイトだとわざわざそんなことはしていません(2019年4月)。日本ローカルの謎の処理のようです。 |
*並び替えに細かな条件を指定する [#a928baaf] | *並び替えに細かな条件を指定する [#a928baaf] | ||
Line 115: | Line 115: | ||
original_list = ["Ab32","ab21","aB13"] | original_list = ["Ab32","ab21","aB13"] | ||
+ | |||
sorted_list = sorted(original_list) | sorted_list = sorted(original_list) | ||
+ | |||
print(sorted_list) | print(sorted_list) | ||
Line 128: | Line 128: | ||
sorted_list = sorted(original_list,key=str.lower) | sorted_list = sorted(original_list,key=str.lower) | ||
+ | |||
print(sorted_list) | print(sorted_list) | ||
Line 145: | Line 145: | ||
sorted_list = sorted(original_list,key=lambda x: x[3]) | sorted_list = sorted(original_list,key=lambda x: x[3]) | ||
+ | |||
print(sorted_list) | print(sorted_list) | ||
結果 | 結果 | ||
- | ['ab21', 'Ab32', 'aB13'] | + | ['ab21', 'Ab32', 'aB13'] |
ここではラムダ式を使いましたが、「何番目の要素で並び替える」という処理はよく使うので、Pythonにはそれに対応した「itemgetter」というメソッドが用意されています。 | ここではラムダ式を使いましたが、「何番目の要素で並び替える」という処理はよく使うので、Pythonにはそれに対応した「itemgetter」というメソッドが用意されています。 | ||
from operator import itemgetter | from operator import itemgetter | ||
+ | |||
sorted_list = sorted(original_list,key=itemgetter(3)) | sorted_list = sorted(original_list,key=itemgetter(3)) | ||
+ | |||
print(sorted_list) | print(sorted_list) | ||
Line 169: | Line 169: | ||
sorted_list = sorted(original_list,key=itemgetter(0,3)) | sorted_list = sorted(original_list,key=itemgetter(0,3)) | ||
+ | |||
print(sorted_list) | print(sorted_list) | ||
Line 186: | Line 186: | ||
from operator import attrgetter | from operator import attrgetter | ||
+ | |||
略 | 略 | ||
+ | |||
sorted_list = sorted(original_list, key=attrgetter('name')) | sorted_list = sorted(original_list, key=attrgetter('name')) |
(This host) = https://njf.jp