ホームページ  >  記事  >  バックエンド開発  >  Pythonのsort()の使い方を詳しく解説

Pythonのsort()の使い方を詳しく解説

高洛峰
高洛峰オリジナル
2017-05-25 11:14:313313ブラウズ

1. 基本形式

sorted(iterable[, cmp[, key[, reverse]]])
iterable.sort(cmp[, key[, reverse]])


パラメータの説明:
(1) iterable は、言うまでもなく、ソートするリストまたは反復可能を指定します。
(2) cmp は、ソート時に比較する関数を指定します。次のような Function または lambda 関数を指定できます。
Students はクラス オブジェクトのリストです。sorted と比較する場合、たとえば、ここでは を比較して cmp 関数を定義する必要があります。 3 番目のデータ メンバーのコードは次のように記述できます。 :

students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
sorted(students, key=lambda student : student[2])


(3) キーは、ソートする要素のどの項目をソートに使用するかを指定する関数です。この関数は上記のコードで示されています。

sorted(students, key=lambda student : student[2])


key で指定されたラムダ関数は、student の 3 番目のフィールド (つまり、student[2]) の要素を削除するため、並べ替える際には、students のすべての要素の 3 番目のフィールドが並べ替えに使用されます。
2. 一般的な使用法:
1. インプレースソート
1) リストにはインプレースソートであるため、タプルには明らかに不可能です。タプル グループは変更できないため、このメソッドを使用する必要があります。

x = [4, 6, 2, 1, 7, 9]
x.sort()
print x # [1, 2, 4, 6, 7, 9]


2. ソートのコピー
1) [:] シャーディングメソッド

x =[4, 6, 2, 1, 7, 9]
y = x[ : ]
y.sort()
print y #[1, 2, 4, 6, 7, 9]
print x #[4, 6, 2, 1, 7, 9]


注: y = x[:] は、x が単純に y に割り当てられる場合、リスト x のすべての要素を y にコピーします。 y = x、y および x は依然として同じリストを指しており、新しいコピーは作成されません。
2)sorted メソッド
sorted は、次のように順序付けされたコピーを返し、型は常にリストです。

x =[4, 6, 2, 1, 7, 9]
y = sorted(x)
print y #[1, 2, 4, 6, 7, 9]
print x #[4, 6, 2, 1, 7, 9] 
print sorted('Python') #['P', 'h', 'n', 'o', 't', 'y']


3. 高度な使用方法
1. cmp 比較関数をカスタマイズします

def comp(x, y):
if x < y:
return 1
elif x > y:
return -1
else:
return 0
nums = [3, 2, 8 ,0 , 1]
nums.sort(comp)
print nums # 降序排序[8, 3, 2, 1, 0]
nums.sort(cmp) # 调用内建函数cmp ,升序排序
print nums # 降序排序[0, 1, 2, 3, 8]


2.キーとリバースを定義します
1.reverse は降順ソートを実装するためにブール値を提供する必要があります。デフォルトは False (昇順) です。
2. キーを使用する場合、ソート処理中に常に呼び出される関数を提供する必要があります:

alist = [('2', '3', '10'), ('1', '2', '3'), ('5', '6', '7'), ('2', '5', '10'), ('2', '4', '10')]
# 多级排序,先按照第3个元素排序,然后按照第2个元素排序:
print sorted(alist, cmp = None, key = lambda x:(int(x[2]), int(x[1])), reverse = False)
-------------------------------------------------------------------------------------------
[('1', '2', '3'), ('5', '6', '7'), ('2', '3', '10'), ('2', '4', '10'), ('2', '5', '10')]


4. Operator.itemgetter 関数
Operator モジュールによって提供される itemgetter 関数は、次のデータを取得するために使用されます。オブジェクトの寸法、およびパラメータはいくつかのシリアル番号 (つまり、オブジェクト内で取得されるデータのシリアル番号) です。以下の例を参照してください。

a = [1,2,3]
>>> b=operator.itemgetter(1)   //定义函数b,获取对象的第1个域的值
>>> b(a)
2
>>> b=operator.itemgetter(1,0) //定义函数b,获取对象的第1个域和第0个的值
>>> b(a)
(2, 1)


なお、operator.itemgetter関数は値を取得するのではなく関数を定義しており、その関数をオブジェクトに適用することで値を取得することができます。
sort での itemmgetter の使用法:

from operator import itemgetter
alist = [('2', '3', '10'), ('1', '2', '3'), ('5', '6', '7'), ('2', '5', '10'), ('2', '4', '10')]
# 多级排序,先按照第3个元素排序,然后按照第2个元素排序:
print sorted(alist, cmp = None, key = itemgetter(2, 1), reverse = False)
print sorted(alist, cmp = None, key = lambda x:itemgetter(2, 1)(x), reverse = False)
print sorted(alist, cmp = None, key = lambda x:map(int, itemgetter(2, 1)(x)), reverse = False)
--------------------------------------------------------------------------------------------------
[('2', '3', '10'), ('2', '4', '10'), ('2', '5', '10'), ('1', '2', '3'), ('5', '6', '7')]
[('2', '3', '10'), ('2', '4', '10'), ('2', '5', '10'), ('1', '2', '3'), ('5', '6', '7')]
[('1', '2', '3'), ('5', '6', '7'), ('2', '3', '10'), ('2', '4', '10'), ('2', '5', '10')]


上記は、エディターによって紹介された Python での sort() メソッドの使用の基本です。ご質問があれば、お気軽にお問い合わせください。メッセージをお送りください。編集者が時間内に全員に返信します。

【関連する推奨事項】

1. Python での sort の使用例を共有します

2. Python での value() の使用方法の詳細なチュートリアル

3. パンダでの使用法DataFrame の sort_values の例

以上がPythonのsort()の使い方を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。