pythonでは、データを様々に並べ替える方法があります。


Pythonリストには内蔵のlist.sort()方法があり、その場所でリストを変更することができます。もう一つのsorted()に内蔵されている関数は反復から新しい並べ替えリストを構築します。本論文では,Python秩序化データを用いた種々の技術を検討する。
sort()元のデータが破壊され、sorted()元のデータが操作されていません。新しいデータが作成されました。
一、基本的な並べ替え
基本的な並べ替えは簡単です。sorted()関数を使うと、新しい並べ替えのリストが返されます。

>>>sorted([5, 2, 3, 1, 4])
[1, 2, 3, 4, 5]
私たちもlist.sortの方法を使うことができます。この方法はリストリストリストリストリストの元の場所操作(元のデータが修正され、元のものではない)です。一般的には、sorted()を使うよりも便利ですが、元リストリストリストリストリストリストリストリストが必要でなければ、sort()を使うほうが効率的です。

>>>a = [5, 2, 3, 1, 4]
>>>a.sort()
>>>a #a    
[1, 2, 3, 4, 5]
もう一つの異なる点は、list.sort()方法がリストオブジェクトデータにのみ適用されます。一方、sorted()は、任意の反復可能なオブジェクトを並べ替えることができます。つまり、sorted()のほうが一般的な使用性があります。ここのヘッドライトは初心者におすすめです。
二、Keyパラメータ関数
list.sort()とsorted()にはkeyパラメータがあり、関数を指定して要素を並べ替えることができます。
例えば、ここでは文字列を使います。文字列も反復可能なオブジェクトです。

>>>sorted("This is a test string from Andrew".split(), key=str.lower)
['a', 'Andrew', 'from', 'is', 'string', 'test', 'This']
最初の文字(小文字に統一された文字)で並べ替えます。keyパラメータの値は、単一パラメータの関数であり、順序付けのためにキーキーキーを返す。この技術の運行はとても速いです。具体的にはなぜですか?分かりません。
たとえば:

>>>student_tuples = [
... ('john', 'A', 15),
... ('jane', 'B', 12),
... ('dave', 'B', 10)]
>>>sorted(student_tuples, key = lambda student:student[2]) 
"""
keyで並べ替えます。
keyの値:lamda関数
ラダ関数のパラメータはstudent_です。tuplesリストの要素-元のグループ
lamban関数演算はstudent_です。tuplesリスト要素の中の元のグループの3番目の要素。

"""
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
この方法はオブジェクトの属性にも作用し得る。例えばここでまず属性を定義します。

>>> class Student:
... def __init__(self, name, grade, age):
... self.name = name
... self.grade = grade
... self.age = age
... def __repr__(self):
... return repr((self.name, self.grade, self.age))
>>> student_objects = [
... Student('john', 'A', 15),
... Student('jane', 'B', 12),
... Student('dave', 'B', 10)]
>>> sorted(student_objects, key=lambda student: student.age) 
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
三、Operatorライブラリの方法
上記のkey関数の方法は非常に一般的ですので、pythonは簡潔で効率的な方法を提供します。operatorライブラリにはitemagetter()、atogetter()、methodcalerの3つの方法があります。
上に述べたoperatorライブラリの方法を使って、上述の例を実現することもできます。さらに簡単で、より速く運行します。

>>> from operator import itemgetter, attrgetter
>>> sorted(student_tuples, key=itemgetter(2))
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
>>> sorted(student_objects, key=attrgetter('age'))
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
operatorライブラリの方法は、マルチ次元の順序付けを提供することができます。例えば私たちのチームは成績と年齢を同時に並べますが、成績の優先度は年齢より高いです。

>>> sorted(student_tuples, key=itemgetter(1,2))
[('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]
>>> sorted(student_objects, key=attrgetter('grade', 'age'))
[('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]
四、昇順と降順
list.sort()とsorted()はいずれもreverseパラメータ(TrueまたはFalse)で昇降順を調整できます。ここでは、studentデータにおける年齢ageの反転ソート規則を行います。

>>> sorted(student_tuples, key=itemgetter(2), reverse=True)
[('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
>>> sorted(student_objects, key=attrgetter('age'), reverse=True)
[('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
五、並べ替え安定性と複雑な並べ替え
並べ替えは安定を保証します。これは複数の記録が同じkeyを持っている場合、元のデータの中の順序が保たれるということです。

>>> data = [('red', 1), ('blue', 1), ('red', 2), ('blue', 2)]
>>> sorted(data, key=itemgetter(0))
[('blue', 1), ('blue', 2), ('red', 1), ('red', 2)]
なお、なぜ2つの記録中のblueは元のデータを保持しているのか、元のデータ順では('blue',1)は('blue',2)より優先されます。
この奇妙な特性は一連の並べ替え手順を用いて複雑な並べ替え方法を構築できるようにする。例えば、studentデータの成績gradeを降順して、年齢ageを昇順に並べます。実現方法:まずageを並べ替えて、gradeを並べ替える。

>>> s = sorted(student_objects, key=attrgetter('age'))
>>> sorted(s, key=attrgetter('grade'), reverse=True) 
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
六、古い方法-cmpパラメータを使う
cmpというのはcompreです。比較します。2.x時代には、cmpパラメータ方法をサポートします。
3.xではcmpパラメータは完全に除去された。
2.xでは、sortはオプションの関数を許可して、compreを比較することができます。この機能は、2つのパラメータを比較し、負の値を返します。はゼロを返し、等しいことを表します。正の値が大きいです。3.xの中で、cmpの思想を使って、私達はこのようにすることができます。

>>> def numeric_compare(x, y):
... return x - y
>>> sorted([5, 2, 4, 1, 3], cmp=numeric_compare)
[1, 2, 3, 4, 5]
並べ替えを降順にしたい場合は、次のようにします。

>>> def reverse_numeric(x, y):
... return y - x
>>> sorted([5, 2, 4, 1, 3], cmp=reverse_numeric)
[5, 4, 3, 2, 1]
締め括りをつける
以上は小编が皆さんに绍介したpythonでデータを整理する方法です。皆さんに助けてほしいです。もし何か疑问があれば、メッセージをください。小编はすぐに返事します。ここでも私たちのサイトを応援してくれてありがとうございます。
本文があなたのためになると思ったら、転載を歓迎します。出所を明記してください。ありがとうございます。