#雑記#ソートa.sort()とsorted(a)の違い:a.sort()ソートするリストの内容を変更し、ソート後のaを返す.sorted(a)は、aに影響を及ぼさずに新しいリストを返します.

2134 ワード

sort()はlistの内蔵メソッドであり、listのみ:sort(cmp=None,key=None,reverse=False)sorted()メソッドはPython内蔵であり、すべての反復可能なシーケンスを並べ替えて新しいシーケンスを生成することができ、反復可能であればよいが、返されるのはlist:sorted(iterable,cmp=None,key=None,reverse=False)である
パラメータ:cmp:関数を比較し、どのパラメータを比較するかはkeyによって決定されます.key:リスト要素の属性または関数をキーワードとします.reverse:TrueまたはFalseを選択できるソート・ルール.iterable:並べ替えられる反復可能なタイプのコンテナ
区別:a.sort()ソートするリストの内容を変更し、ソート後のaを返す.sorted(a)は、aに影響を及ぼさずに新しいリストを返します.
>>> a=[2,412,45,76]
>>> a.sort()
>>> a
[2, 45, 76, 412]

>>> b=[1,412,45,76]
>>> sorted(b)
[1, 45, 76, 412]
>>> b
[1, 412, 45, 76]

リストがlist(またはtuple)で構成されている場合、デフォルトでは、sortおよびsortedはlist[0](またはtuple[0])をソートのkeyとしてソートされます.主に3つの方法があります:key関数に基づいて;cmp関数ベースとreverse関数ベース
#    
>>> ls=[(1,2,3),(2,1,3),(3,3,2)]
>>> ls.sort()
>>> ls
[(1, 2, 3), (2, 1, 3), (3, 3, 2)]

#  key   
>>> ls=[(1,2,3),(2,1,3),(3,3,2)]
>>> ls.sort(key=lambda x:x[2]) 
>>> ls
[(3, 3, 2), (1, 2, 3), (2, 1, 3)]

#  cmp    
>>> ls=[(1,2,3),(2,1,3),(3,3,2)]
>>> ls.sort(cmp = lambda x,y:cmp(x[1],y[1]))
>>> ls
[(2, 1, 3), (1, 2, 3), (3, 3, 2)]

#  reverse     reverse=False     ;reverse=True     
>>> ls=[2,4,2,56,87,34]
>>> ls.sort(reverse=False)
>>> ls
[2, 2, 4, 34, 56, 87]

>>> ls=[2,4,2,56,87,34]
>>> ls.sort(reverse=True)
>>> ls
[87, 56, 34, 4, 2, 2]

cmpの使用cmpは、2つのパラメータ(iterableの要素)を受信し、最初のパラメータが2番目のパラメータより小さい場合、負の数を返すカスタム比較関数を指定します.最初のパラメータが2番目のパラメータに等しい場合は、ゼロを返します.最初のパラメータが2番目のパラメータより大きい場合は、正の数を返します.デフォルトはNoneです.
#cmp(e1, e2)             ,   :  (e1 < e2);0(e1 == e2);  ( e1 > e2)
>>> cmp(2,3)
-1
>>> cmp(3,2)
1
>>> cmp(0,0)
0

cmp()パラメータの最初の値は2番目の値よりも小さく、a−bの場合は昇順であると簡単に理解できる.b-a則降順
>>> ls=[3,65,3,7,8,5]
>>> ls.sort(cmp=lambda a,b:a-b) 
>>> ls
[3, 3, 5, 7, 8, 65]

>>> ls=[3,65,3,7,8,5]
>>> ls.sort(cmp=lambda a,b:b-a)
>>> ls
[65, 8, 7, 5, 3, 3]