この記事では、Pythonでのリストの並べ替えに関するガイドについて説明します。 Pythonリストオブジェクトは、1つ以上のコンマ区切りのアイテムのコレクションです。これは反復可能なオブジェクトであり、ループステートメントやその他の式を使用してリストを反復処理することでその要素にアクセスできます。ソートメソッドとソートメソッドを使用してPythonリストをソートできます。どちらも、記事で説明されています。この記事のすべてのコードサンプルは、Ubuntu21.04のPython3.9.5でテストされています。
ソート方法
sortメソッドは、リストをインプレースでソートします。つまり、要素を並べ替えて並べ替えるリストオブジェクトを変更します。元のリストを必要とせず、リストが要素の順序をインプレースで変更してもかまわない場合、これはPythonでリストを並べ替えるのに最も効率的な方法です。この例を考えてみましょう。
NS= [2、 8、 6、 4]
NS。選別(()。
印刷 ((NS)。
上記のコードサンプルを実行すると、次の出力が得られます。
[2、 4、 6、 8]
コードサンプルの最初のステートメントはリストを定義します。次に、リストに対してsortメソッドが呼び出されます。リストを印刷すると、元のリストの順序が変更されていることがわかります。
デフォルトでは、Pythonはリストを昇順で並べ替えます。リストを降順で並べ替える場合は、以下のコードサンプルに示すように、逆の方法を使用します。
NS= [2、 8、 6、 4]
NS。選別(()。
NS。逆行する(()。
印刷 ((NS)。
上記のコードサンプルを実行すると、次の出力が得られます。
[8、 6、 4、 2]逆の方法でも、新しいリストを作成せずにPythonリストをインプレースで変更します。
リストに文字列要素が含まれている場合、リストでsortメソッドを呼び出すと、記号と数字が最初に並べられるアルファベット順に並べ替えられます。以下のコードサンプルをご覧ください。
NS= ['NS'、 'に'、 'と'、 「4」、 '#']NS。選別(()。
印刷 ((NS)。
上記のコードサンプルを実行すると、次の出力が得られます。
['#'、 「4」、 'に'、 'NS'、 'と']文字列要素を含むリストでreverseメソッドを使用することもできます。
NS= ['NS'、 'に'、 'と'、 「4」、 '#']NS。選別(()。
NS。逆行する(()。
印刷 ((NS)。
上記のコードサンプルを実行すると、次の出力が得られます。
['と'、 'NS'、 'に'、 「4」、 '#']ソートされた方法
sortedメソッドは、sortメソッドと同じ方法でPythonリストもソートします。ただし、元のリストを変更する代わりに、新しいリストが返されるため、元のリストを再利用する場合に備えて、元のリストは変更されません。以下のコードを検討してください。
list1= ['NS'、 'に'、 'と'、 「4」、 '#']list2= ソート済み((list1)。
印刷 ((list1、list2)。
上記のコードサンプルを実行すると、次の出力が得られます。
['NS'、 'に'、 'と'、 「4」、 '#'] ['#'、 「4」、 'に'、 'NS'、 'と']出力では、list1はそのままで、list2にソートされた要素があることがわかります。 list2の逆の方法を使用して、順序付けの方法を変更することもできます。
逆引数
sortメソッドとsortメソッドの両方でreverse関数の代わりにreverse引数を使用して、ソートされたリストを降順で取得できます。 True値を指定するだけで、並べ替えの順序を変更できます。
list1= ['NS'、 'に'、 'と'、 「4」、 '#']list2= ソート済み((list1、逆行する=NS)。
印刷 ((list1、list2)。
上記のコードサンプルを実行すると、次の出力が得られます。
['NS'、 'に'、 'と'、 「4」、 '#'] ['と'、 'NS'、 'に'、 「4」、 '#']キー関数を使用して、リストの要素を並べ替えるための独自のロジックを指定する
sortメソッドとsortedメソッドの両方で、呼び出し可能な関数を値として受け取る追加のキー引数を指定できます。この重要な引数には、組み込みのPythonモジュールから既存の関数を割り当てることも、カスタムロジックを使用して独自の関数を提供することもできます。以下のコードサンプルをご覧ください。
list1= ['abcde'、 'xyz'、 'ijkl']list2= ソート済み((list1、鍵=len)。
印刷 ((list1、list2)。
list1。選別((鍵=len)。
印刷 ((list1)。
上記のコードサンプルを実行すると、次の出力が得られます。
['abcde'、 'xyz'、 'ijkl'] ['xyz'、 'ijkl'、 'abcde']['xyz'、 'ijkl'、 'abcde']
コードサンプルは、sortedメソッドとsortメソッドの両方でのキー引数の使用法を示しています。提供される関数はlenと呼ばれ、文字列オブジェクトまたは反復可能オブジェクトの長さを決定します。関数またはcallableは、元々1つの引数のみを取る必要があります。中括弧を使用せずにキー引数に割り当てます。 key引数に指定された呼び出し可能関数は、リストの各要素で呼び出されます。この呼び出し可能なメソッドから返された値は、リストを並べ替えるためのキーとして使用されます。したがって、len関数をkey引数に指定すると、リストの要素が長さの順に、つまり最短から最長の順に並べ替えられます。前に述べたように、いつでも逆の方法を使用してソート方法を逆にすることができます。
独自のカスタム関数または単一の式の値を返すワンライナーラムダ関数を使用することもできます。以下のコードサンプルを見てください。リストには、果物の木枠の現在の在庫のタプルが含まれています。
list1= [(('マンゴー'、 99)。、 (('オレンジ'、 51)。、 (('バナナ'、 76)。]list1。選別((鍵=ラムダ在庫:在庫[1])。
印刷 ((list1)。
上記のコードサンプルを実行すると、次の出力が得られます。
[(('オレンジ'、 51)。、 (('バナナ'、 76)。、 (('マンゴー'、 99)。]ラムダ関数には、タプル形式のリストの各要素である引数インベントリが付属しています。次に、各タプルの2番目の要素をキーとして返します(インデックス1)。次に、sort関数は、すべてのタプルを2番目の要素で昇順でソートします。最終結果でreverse関数またはreverse引数を使用して、ソートの順序を逆にすることもできます。
結論
これらは、Pythonで反復可能なリストのコンテンツを並べ替えることができるいくつかの方法です。重要な引数を使用すると、組み込みのソート方法とは異なるニーズを持つ可能性のあるアプリケーションに適した、独自のカスタムソートロジックを作成できます。