pythonソート関数sort()とsorted()の違い

4450 ワード

pythonの中でsortedとsortはどんな違いがありますか?
sort(cmp=None,key=None,reverse=False)
sorted(iterable、cmp=None、key=None、reverse=False)
sortは容器の関数で、Listのメンバー関数sortで並べ替えます。
sortedはPythonの内装関数と同じパラメータで、built-in関数sortedで並べ替えます。
sorted(iterable,key=None,reverse=False)は、新しいリストに戻り、すべての反復可能なオブジェクトに有効です。
sort(key=None,reverse=False)はその場でリストを変えてreverse:True逆順です。False正序
たとえば:

>>> a=[1,3,5,2,9,4,7,8,6,0]
>>> a.sort()
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a=[1,3,5,2,9,4,7,8,6,0]
>>> sorted(a)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a
[1, 3, 5, 2, 9, 4, 7, 8, 6, 0]
詳細は以下の通りです。
Python listは、ソート()法を内蔵して並べ替えを行い、pythonに内蔵されたグローバルsorted()法を用いて、反復可能なシーケンス順序付けに対して新しいシーケンスを生成してもよい。
sorted(iterable,key=None,reverse=False)は、新しいリストに戻り、すべての反復可能なオブジェクトに有効です。
sort(key=None,reverse=False)はその場でリストを変えてreverse:True逆順です。False正序
sortは容器の関数です。sort(cmp=None、key=None、reverse=False)
sortedはpythonの内建関数です。sorted(iterable、cmp=None、key=None、reverse=False)
パラメータ解析:
cmp:比較関数は、どのパラメータをkeyで決定しますか?例えば、cmp(e 1、e 2)は、2つのパラメータを有する比較関数であり、戻り値:負(e 1<e 2);0(e 1==e 2)正数(e 1>e 2)
key:キーワードとしてリスト要素の属性または関数を使用します。
reverse:ソート規則は、TrueまたはFalseを選択できます。
sortedもう一つのパラメータiterable:並べ替えられる反復型のコンテナ 
例1:

>>> a=[1,2,5,3,9,4,6,8,7,0,12]
>>> a.sort()
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12]


>>> a=[1,2,5,3,9,4,6,8,7,0,12]
>>> sorted(a)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12]
>>> a
[1, 2, 5, 3, 9, 4, 6, 8, 7, 0, 12]
違い:
無秩序なリストaに対して、a.sort()を呼び出し、aを並べ替えてaに戻り、sort()関数は並べ替えすべきリストの内容を修正する。
同じ無秩序なリストaに対して、sorted(a)を呼び出し、aを並べ替えて新しいリストに戻り、aに影響を与えない。
例2:
学生一人一人の情報を元のグループで保存すると仮定します。学号、氏名、年齢を含みます。すべての学生の情報をリストで保存します。

>>> list1=[(8, 'Logan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)]
>>> list1.sort()
>>> list1
[(2, 'Mike', 22), (5, 'Lucy', 19), (8, 'Logan', 20)]


>>> list1=[(8, 'Logan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)]
>>> sorted(list1)
[(2, 'Mike', 22), (5, 'Lucy', 19), (8, 'Logan', 20)]
>>> list1
[(8, 'Logan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)]
まとめ:一例から分かるように、リストがリスト(またはtuple)で構成されている場合、デフォルトでは、sortとsortedはリスト[0](またはtuple[0])に従って並べ替えられたkeyとして並べ替えられます。
以上はデフォルトの並べ替えです。コード制御の2つの関数の並べ替え挙動を作成できます。主に3つの方法があります。key関数に基づいて。cmp関数とreverse関数に基づいて
1)key関数によるソート

>>> list1=[(8, 'Logan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)]
>>> list1.sort(key=lambda x:x[2])
>>> list1
[(5, 'Lucy', 19), (8, 'Logan', 20), (2, 'Mike', 22)]


>>> list1=[(8, 'Logan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)]
>>> sorted(list1, key=lambda x:x[2])
[(5, 'Lucy', 19), (8, 'Logan', 20), (2, 'Mike', 22)]
>>> list1
[(8, 'Logan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)]
2)cmp関数に基づく

>>> list1=[(8, 'Zogan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)]
>>> list1.sort(cmp=lambda x,y:cmp(x[1],y[1]))
>>> list1
[(5, 'Lucy', 19), (2, 'Mike', 22), (8, 'Zogan', 20)]


>>> list1=[(8, 'Zogan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)]
>>> sorted(list1, cmp=lambda x,y:cmp(x[1],y[1]))
[(5, 'Lucy', 19), (2, 'Mike', 22), (8, 'Zogan', 20)]
>>> list1
[(8, 'Zogan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)] 
3)逆転関数に基づく

>>> a=[1,2,5,3,9,4,6,8,7,0,12]
>>> a.sort(reverse=False)
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12]
 

>>> a=[1,2,5,3,9,4,6,8,7,0,12]
>>> a.sort(reverse=True)
>>> a
[12, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>> a.sort(reverse=True)
小結:reverse=Falseは昇順に並べ替えます。reverse=Trueは降順にソートされます。