様々なソートのpythonのデータがどのようにでしょうか?

転載:https://www.cnblogs.com/fujian-code/p/7501795.html

これは、リストには、その場で変更することができ、はlist.sortのPythonリスト()メソッドを構築しました。反復から新しいソート・リストを構築するためのソート()組み込み関数もあります。

本稿では、Pythonでデータをソートするために様々な技術の使用を検討します。http://mp.weixin.qq.com/s?__biz=MzI5NDY1MjQzNA==&mid=2247484360&idx=2&sn=5e0d78a129f7be71dee355ae1492b8b9&chksm=ec5edcb5db2955a37972ca8bd3fd22572914dac8b4852e622a5afd8b24b999f4967bed7e444d&mpshare=1&scene=23&srcid=0910RYUt9YnMlda0hid9zem2#rdからの振替

、注意してください元のデータは生データ上では動作しません()ソート、破棄される)ソートを(が、新しいデータを構築しました。

まず、基本的な順序
で最も基本的なソートは非常に簡単です。ただ、リストの新しい並べ替えを返すようにソートされた()関数を使用します

>>>ソート([5,2 ,. 3 ,. 1 ,. 4])
[1、2 ,. 3 ,. 4 ,. 5]
我々ははlist.sort()メソッドを使用することができます。その場での方法の動作は、(元データは、オリジナルのない真の色を変更された)リスト中で行われます。一般的に、ソート()は簡単に使用することをお勧めしていますが、並べ替えを使用して、元のリストを一覧表示する必要がない場合は()より効率的になります。

A = >>> [5、2、3、1、4]
>>> a.sort()
>>> #Aが変更された
[1、2、3、4、5]
別の違い、リスト。ソート()メソッドは、オブジェクトデータのリストに適用することができます。ソート()が、任意のiterableを並べ替えることができます。そのソート()より一般的な使いやすさ。ここではヘッドライトがソート初心者にお勧めです()。

二つは、キーの機能はパラメータ
はlist.sort()およびソートを()の要素をソートする機能を指定することも重要なパラメータを持っています。

例えば、ここでは、文字列を使用します(文字列はイテレート可能オブジェクトです)

>>>ソート( "テスト文字列これはアンドリューからIS" .split()、キー= str.lower)
[、IS ''、 '文字列'、 'テスト' 'から' 'A'、 'アンドリュー'、 「この」]
私たちは、最初の文字(再統一後の小文字)でソートを指定します。値は、単一のパラメータ機能、キーをソートするためのリターンキーで重要なパラメータです。この技術は、なぜ、私は知らない具体的には、非常に高速に実行されています。

例えば:

student_tuples = >>> [
...( 'ジョン'、 'A'、15)、
...( 'ジェーン'、 'B'、12である)、
...( 'デイブ'、 'B'、10) ]
>>>(キー=ラムダ学生student_tuples:学生は、[2])ソート 
「」 "
キーをソートすることによって
、キー値:ラムダ関数
リストにおけるラムダ機能要素はstudent_tuplesある-タプル
ラムダ関数演算はstudent_tuplesあります要素のリスト内のタプルの第三の要素。""
"
[( 'デイブ'、 'B'、10)、( 'ジェーン'、 'B'、12である)、( 'ジョン'、 ''、15) 】
同一の方法はまた、オブジェクトのプロパティに適用されます。ここで例えば、私は、プロパティを定義します

>>>クラスの学生:
...デフ__init __(自己、名前、学年、年齢):
... self.name =名
... self.grade =グレード
... self.age =年齢
... DEF __repr__ (自己):
...リターンのrepr((self.name、self.grade、self.age))
>>> student_objects = [
...学生( 'ジョン'、 'A'、15)、
...学生( 'ジェーン'、 'B'、12)、
...学生( 'デイブ'、 'B'、10)]
>>>ソート(student_objects、キー=ラムダ学生:student.age) 
[( 'デイブ'、 'B'、10)、( 'ジェーン'、 'B'、12)、( 'ジョン'、 'A'、15)]

第三に、法のオペレータライブラリ
Pythonはシンプルかつ効率的な方法を提供するよう法上で列挙したものキーの機能は、非常に一般的です。オペレータのライブラリがitemgetterている()、attrgetter()、 methodcaller() これらの三つの方法。

上記の方法のライブラリを使用して、オペレータは、上記の実施例はまた速く、はるかに簡単に実装されてもよく。

>>>からインポートitemgetterオペレータ、attrgetter
>>>ソート(student_tuples、キー= itemgetter(2))
[( 'デイブ'、 'B'、10)、( 'ジェーン'、 'B'、12です)、( 'ジョン'' A '15)]
(年齢>>>ソート済みキー=(attrgetter student_objects、' '))
[('デイブ'' B '10)、('ジェーン'' B」、12です) 、(「ジョン」、「 」、15)]
この方法は、データベースのオペレータ多次元順序を提供することができます。例えば、我々は同時にチームのスコアと年齢をソートし、その結果は、年齢よりも高い優先順位です。

>>>ソート(student_tuples、キー= itemgetter(1,2))
[( 'ジョン'、 'A'、15)、( 'デイブ'、 'B'、10)、( 'ジェーン'、 'B'、 12)]
>>>ソート(student_objects、キー= attrgetter( 'グレード'、 '年齢'))
[( 'ジョン'、 'A'、15)、( 'デイブ'、 'B'、10)、(」ジェーン」、 'B'、12)]

第四に、昇降
はlist.sort()とソート()(trueまたはfalse)逆下降リットルパラメータによって調整することができます。ここでは、年齢の学生時代のデータとの照合を反転します。

>>>ソート(student_tuplesは、キー= itemgetter(2)は、逆= TRUE)
[( 'ジョン'、 'A'、15)、( 'ジェーン'、 'B'、12)、( 'デイブ'、「B 」、10)]
>>>ソート(student_objects、キー= attrgetter( '年齢')、=真逆)
[( 'ジョン'、 'A'、15)、( 'ジェーン'、 'B'、12)、 ( 'デイブ'、 'B'、10)]

第五に、安定性やソート、ソートの複雑
以上のレコードが同じキーを持っている場合、発注生データが保存されていることを意味し、安定性を保護するためにソート。

データ= >>> [( '赤' ,. 1)、( '青' ,. 1)、( '赤'、2)、( '青'、2)]
>>>ソート(データ、キー= itemgetter(0 ))
[( '青' ,. 1)、( '青'、2)、( '赤' ,. 1)、( '赤'、2)]
、元のデータの2つの青色の記録データが保持されることに注目してくださいしたがって、元のデータ配列( '青'、1)比( '青'、2)優先順位です。

この素晴らしい機能は、私たちは、複雑なソート方法を構築するために一連のステップを使用することができますソートすることができます。昇順にグレードの生徒データを降順で例えば、その結果、その後、年齢の年齢。方法:まず、ソート年齢の、その後、ソートのグレード。

>>> sが=ソート(student_objects、キー= attrgetter( '年齢'))
>>>ソート(S、キー= attrgetter( '級')、=真逆) 
(、10 'デイブ'、 'B')を[ 、( 'ジェーン'、 'B'、12)、( 'ジョン'、 'A'、15)]

第六に、古い方法-引数のCMP使用して
比較し、CMPをされるには、比較のコントラスト。2.xの時代では、CMPパラメータ法をサポートしています。

3.xでは、CMP引数が完全に除去されました。

2.xでは、ソート比較するために比較することができ、オプション機能を可能にします。この機能は、2つのパラメータを比較し、代表的な未満の負の値を返すように注意しなければならない、リターンゼロに、代表的に等しく、代表値よりも大きいです。3.xでは、CMPの思考を使用し、我々はこれを行うことができます:

>>> DEF numeric_compare(X、Y)
...リターンX - Y
>>>ソート([5、2、4、1、3]、CMP = numeric_compare)
[1、2、3、4、5]

あなたがソート降順にしたい場合は、以下を使用することができます

>>> DEF reverse_numeric(X、Y)
...リターンY - X
>>>ソート([5、2、4、1、3]、CMP = reverse_numeric)
[5、4、3、2、1]

おすすめ

転載: blog.csdn.net/dq932073495/article/details/91471573