Python 3はリストをメタグループ指定列で並べ替える
Pythonバージョン:python 3.+運転環境:Mac OS IDE:pycharm Python内蔵のソート方法 並べ替え方法紹介 基本的なリストソート tupleをlistとする要素 dictをlistとする要素 を拡張
Python内蔵のソート方法
1ソート方法の説明
Pythonにはリストに組み込まれたsort()メソッドとグローバルなsorted()メソッドの2つのソート関数があります
2基本的なリストのソート
1)list.sort()ソート
2)sorted()ソート
3 tupleをlistの要素とする
デフォルトでsort関数とsorted関数が受信するパラメータがメタグループの場合、メタグループの最初の要素でソートしてから2番目の要素でソートし、3番目、4番目...でソートします.簡単な例で説明します.以下のリストを例に挙げます.
sorted()で並べ替えました
並べ替えた結果(0,‘B’)が(0,‘a’)の前にあることがわかります.これは,メタグループの1番目の要素で並べ替えた後,(0,‘B’),(0,‘a’)を2番目の要素で並べ替えたのに対し,’B’のASCII符号化は’a’よりも小さいので,(0,‘B’)は(0,‘a’)の前に並べ替えられたからである.
では、どのようにしてソートするときに大文字と小文字を区別しないようにしますか?
これは
そのうちの
アルファベットを最初のソートルールとし、アルファベットの大文字と小文字が敏感でない場合は、どのように実現しますか?これは前に述べたように
デフォルトでsort関数とsorted関数が受信するパラメータがメタグループの場合、メタグループの最初の要素でソートしてから2番目の要素でソートし、3番目、4番目...でソートします.
Lambdaと協力してカスタムtupleを返します.コードは次のとおりです.
4[拡張]dictをlistの要素とする
このlistの要素はdict形式で、各dictには
Python内蔵のソート方法
1ソート方法の説明
Pythonにはリストに組み込まれたsort()メソッドとグローバルなsorted()メソッドの2つのソート関数があります
sorted(iterable,key=None,reverse=False) # , , ;reverse:-True -False
list.sort(key=None,reverse=False) # list , list , ;reverse:-True -False
2基本的なリストのソート
1)list.sort()ソート
data = [5, 7, 9, 3, -6, -7, -8, -9, 3, -8]
result = data.sort()
print(data) # [-9, -8, -8, -7, -6, 3, 3, 5, 7, 9]
print(result) # None
2)sorted()ソート
data = [5, 7, 9, 3, -6, -7, -8, -9, 3, -8]
result = sorted(data)
print(data) # [5, 7, 9, 3, -6, -7, -8, -9, 3, -8]
print(result) # [-9, -8, -8, -7, -6, 3, 3, 5, 7, 9]
3 tupleをlistの要素とする
デフォルトでsort関数とsorted関数が受信するパラメータがメタグループの場合、メタグループの最初の要素でソートしてから2番目の要素でソートし、3番目、4番目...でソートします.簡単な例で説明します.以下のリストを例に挙げます.
data = [(1, 'B'), (1, 'A'), (2, 'A'), (0, 'B'), (0, 'a')]
sorted()で並べ替えました
data = [(1, 'B'), (1, 'A'), (2, 'A'), (0, 'B'), (0, 'a')]
result = sorted(data)
print(data) # [(1, 'B'), (1, 'A'), (2, 'A'), (0, 'B'), (0, 'a')]
print(result) # [(0, 'B'), (0, 'a'), (1, 'A'), (1, 'B'), (2, 'A')]
並べ替えた結果(0,‘B’)が(0,‘a’)の前にあることがわかります.これは,メタグループの1番目の要素で並べ替えた後,(0,‘B’),(0,‘a’)を2番目の要素で並べ替えたのに対し,’B’のASCII符号化は’a’よりも小さいので,(0,‘B’)は(0,‘a’)の前に並べ替えられたからである.
では、どのようにしてソートするときに大文字と小文字を区別しないようにしますか?
これは
sort
メソッドとsorted
メソッドのkey
パラメータを使用します.具体的な実装を見てみましょう.data = [(1, 'B'), (1, 'A'), (2, 'A'), (0, 'B'), (0, 'a')]
# key
result = sorted(data,key=lambda x:(x[0],x[1].lower()))
print(data) # [(1, 'B'), (1, 'A'), (2, 'A'), (0, 'B'), (0, 'a')]
print(result) # [(0, 'a'), (0, 'B'), (1, 'A'), (1, 'B'), (2, 'A')]
そのうちの
lambda x:(x[0],x[1].lower()
は匿名関数として理解できる.次のような機能があります.def fun(x)
return(x[0],x[1].lower())
アルファベットを最初のソートルールとし、アルファベットの大文字と小文字が敏感でない場合は、どのように実現しますか?これは前に述べたように
デフォルトでsort関数とsorted関数が受信するパラメータがメタグループの場合、メタグループの最初の要素でソートしてから2番目の要素でソートし、3番目、4番目...でソートします.
Lambdaと協力してカスタムtupleを返します.コードは次のとおりです.
data = [(1, 'B'), (1, 'A'), (2, 'A'), (0, 'B'), (0, 'a')]
# x[1].lower() , sorted , ,
result = sorted(data,key=lambda x:(x[1].lower(),x[0]))
print(data) # [(1, 'B'), (1, 'A'), (2, 'A'), (0, 'B'), (0, 'a')]
print(result) # [(0, 'a'), (1, 'A'), (2, 'A'), (0, 'B'), (1, 'B')]
4[拡張]dictをlistの要素とする
このlistの要素はdict形式で、各dictには
と
が保存されています.現在、昇順で並べ替えたいと思っています.data = [{'name': ' ', 'height': 175}, {'name': ' ', 'height': 165}, {'name': ' ', 'height': 185}]
# x['height'] tuple
result = sorted(data,key=lambda x:(x['height'],x['name']))
print(data) #
print(result)
#data :[{'name': ' ', 'height': 175}, {'name': ' ', 'height': 165}, {'name': ' ', 'height': 185}]
#result :[{'name': ' ', 'height': 165}, {'name': ' ', 'height': 175}, {'name': ' ', 'height': 185}]