ホームページ >バックエンド開発 >Python チュートリアル >Python入門一覧。sortメソッドと組み込み関数sorted

Python入門一覧。sortメソッドと組み込み関数sorted

coldplay.xixi
coldplay.xixi転載
2021-01-18 17:11:343598ブラウズ

Python入門一覧。sortメソッドと組み込み関数sorted

関連する無料学習の推奨事項: Python ビデオ チュートリアル

Python リストの並べ替え list.sort メソッドと組み込み関数sorted

リストを取得した後、このリストがニーズを満たしていないことがよくあります。必要なのは特別な順序のリストです。

このとき、list.sortメソッドと組み込み関数sortedを利用することができます。この記事では、list.sortメソッドと組み込み関数sortedの使い方と違いについて紹介します。

1. list.sort メソッド

list.sort メソッドは、リストをその場で並べ替えます。つまり、元のリストのコピーは作成されません。このため、このメソッドの戻り値は None となり、このメソッドでは新しいリストが作成されないことがわかります。

この場合に None を返すのは、実際には Python の規則です。関数またはメソッドがその場でオブジェクトを変更する場合、呼び出し元が渡されたパラメータを認識できるように、None を返す必要があります。変更が発生し、新しいオブジェクトはありません。が作成されました。

コードを見てみましょう:

# coding=utf-8
list_a = [1, 2, 8, 3, 7, 9, 5, 7]
# sort()方法没有返回值
list_b = list_a.sort()
print("list_a: ", list_a)
print('list_b: ', list_b)

実行結果:

list_a:  [1, 2, 3, 5, 7, 7, 8, 9]
list_b:  None

インプレース変更を示すために None を返すことには、この規則には欠点があります。呼び出し側はそれをスタンドアップして連結することはできません。逆に、新しいオブジェクトを返すメソッドをチェーンして、一貫したインターフェイスを形成することができます。

2.sorted 組み込み関数

list.sort とは逆に、sorted 組み込み関数は戻り値として新しいリストを作成します。

このメソッドは、不変のシーケンスやジェネレーターを含め、あらゆる形式の反復可能なオブジェクトをパラメーターとして受け入れることができ、ソートされたパラメーターに関係なく、最終的にはリストを返します。

コード例:

list_c = [1, 2, 8, 3, 7, 9, 5, 7]
# sorted内置函数会返回一个排序后的新列表
list_d = sorted(list_c)
print("list_c: ", list_c)
print('list_d: ', list_d)

実行結果:

list_c:  [1, 2, 8, 3, 7, 9, 5, 7]
list_d:  [1, 2, 3, 5, 7, 7, 8, 9]

組み込み関数sortedを使用すると、新しいリストが返されますが、元のリストが返されることがわかります。変わっていない。

これには 2 つの利点があります:

1. 元のリストとソートされたリストの両方を使用する必要がある場合、またはリスト以外の反復可能オブジェクトをリストとソートの両方にソートしたい場合は、完了です

2. 戻り値がある場合、連鎖呼び出しを行うことができます

# 可以对非列表的可迭代对象排序生成列表
str_e = 'python'
list_e = sorted(str_e)
print(list_e)

# 链式调用
str_f = '-'.join(sorted(str_e)).upper().split('-')
print(str_f)

実行結果:

['h', 'n', 'o', 'p', 't', 'y']
['H', 'N', 'O', 'P', 'T', 'Y']

3. キーワード パラメータ key および reverse

list.sort メソッドであっても、sorted 関数であっても、オプションのキーワード パラメータが 2 つあります。

key のみを含む関数を受け取ります。 1 つのパラメーター。この関数はシーケンス内の各要素に対して使用され、その結果が並べ替えアルゴリズムが依存する比較キーになります。

たとえば、一部の文字列を並べ替える場合、key=str. lower を使用して大文字と小文字を無視した並べ替えを実現したり、key=len を使用して文字列の長さに基づいて並べ替えたりできます。 key のデフォルト値は恒等関数です。これは、要素自体の値がデフォルトでソートに使用されることを意味します。

reverse:

True に設定すると、ソートされたシーケンス内の要素が降順で出力されます (つまり、最大値が最小値とみなされます) value) Sorting)、reverse のデフォルト値は False です。

phone = ('HUAWEI', 'OPPO', 'MI', 'MEIZU', 'VIVO')
# 按长度进行排序
phone_list = sorted(phone, key=len)
print(phone_list)

phone_list_re = sorted(phone, key=len, reverse=True)
print(phone_list_re)

実行結果:

['MI', 'OPPO', 'VIVO', 'MEIZU', 'HUAWEI']
['HUAWEI', 'MEIZU', 'OPPO', 'VIVO', 'MI']

上記のコードでは、最初の並べ替えにより、長さで並べ替えられた新しい文字列リストが作成されます。 2 番目の並べ替えは、長さによる並べ替えを昇順から降順に変更することです。

注意していれば、2 番目の結果が最初の並べ替え結果の完全な反転ではないことがわかるはずです。

OPPO と VIVO の長さは両方とも 4 です。 reverse=True の後、それらの相対位置は最初の並べ替えと同じになります。その理由は何でしょうか?

sorted と list.sort のソート アルゴリズムは Timsort で、元のデータの順序特性に応じて挿入ソートとマージ ソートを交互に使用する適応型アルゴリズムです。


Python のソート アルゴリズム Timsort は安定しています (これだけは知っておいてください)。つまり、2 つの要素のサイズが比較にならない場合でも、各ソートの結果における相対位置は固定されます。

使用される並べ替えアルゴリズムは安定しているため、つまり長さが同じ場合、OPPO と VIVO の相対位置は変わりません。

list.sort() メソッドとsorted組み込み関数の使用法については、もうマスターしました~

関連する無料学習の推奨事項:
Python チュートリアル### (ビデオ) ######

以上がPython入門一覧。sortメソッドと組み込み関数sortedの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。