Python 3は、リストをメタグループ指定列でソートする方法の分析を実現する

4566 ワード

この例では、Python 3がリストをメタグループ指定列でソートする方法について説明します.皆さんの参考にしてください.具体的には以下の通りです.
Pythonバージョン:python 3.+運転環境:Mac OS IDE:pycharm
Python内蔵のソート方法
1ソート方法の説明
Pythonにはリストに組み込まれたsort()メソッドとグローバルなsorted()メソッドの2つのソート関数がありますsorted(iterable,key=None,reverse=False)#は、オブジェクト自体を変更せずに、デフォルトの昇順で並べ替えられた新しいリストを返します.reverse:-True降順-Fillseシーケンスは、すべての反復可能なオブジェクトに対して有効なlist.sort(key=None,reverse=False)#リスト自体をソートし、新しいリストオブジェクトを返さず、デフォルトの昇順です.reverse:-True降順-Fillse順
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}]


PS:ここでは、ソートに関するプレゼンテーションツールをお勧めします.参考にしてください.
挿入/選択/バブル/マージ/ヒル/クイックソートアルゴリズムプロセスツールをオンラインアニメーションで実証します.http://tools.jb51.net/aideddesign/paixu_ys
Pythonに関する詳細について興味のある読者は、「Pythonデータ構造とアルゴリズムチュートリアル」、「Pythonリスト(list)操作テクニック総括」、「Pythonコード操作テクニック総括」、「Python関数使用テクニック総括」、「Python文字列操作テクニック総括」、「Python入門と進級経典チュートリアル」を参照してください.
ここではPythonプログラムの設計に役立つことを願っています.