Pythonでリストを並べ替える方法

公開: 2022-03-30

この記事では、Pythonでリストを並べ替える方法を説明します。

Pythonでは、 sort()メソッドを使用してリストを適切に並べ替えることができます。 または、組み込みのsorted()関数を使用して、リストのソートされたコピーを取得できます。

このチュートリアルでは、次のことを学びます。

  • sort()メソッドとsorted()関数の構文
  • リストを昇順と降順で並べ替えるコード例
  • keyパラメータを使用して並べ替えをカスタマイズする
  • sort()sorted()の違い

はじめましょう!

Pythonのsort()メソッドの構文

sort()メソッドはPythonリストに作用します。 そして、リストをその場でソートし、元のリストを変更します。

Pythonのsort()メソッドの構文は次のとおりです。

 <list>.sort(reverse = True | False, key = <func>)

上記の構文を解析してみましょう。

  • <list>は、有効なPythonリストオブジェクトです。
  • reverseは、TrueまたはFalseのいずれかを取るオプションのパラメーターです。
  • reverseのデフォルト値はFalseで、リストは昇順でソートされます。 Trueを指定して、リストを降順で並べ替えます。
  • keyは、 <func>に設定されるオプションのパラメーターでもあります。
  • <func>は、組み込み関数またはユーザー定義関数にすることができます。

次のセクションでは、簡単な例のコーディングを開始します。

Pythonリストを昇順で並べ替える方法

リストnumsを検討してください。 リストを昇順で並べ替えるには、リストのsort()メソッドを呼び出します。

次のコードスニペットを実行します。

 nums = [25,13,6,17,9] nums.sort() print(nums) # Output: [6, 9, 13, 17, 25]

リスト番号はnumsでソートされており、元のリストが変更されています。 これは、インプレース並べ替えと呼ばれます。

Pythonリストを降順で並べ替える方法

リストを降順で並べ替えるには、以下に示すように、 reverseTrueに設定します。

 nums = [25,13,6,17,9] nums.sort(reverse = True) print(nums) # Output: [25, 17, 13, 9, 6]

リストが降順でソートされていることがわかります。

Pythonのsort()メソッドでキーを使用する方法

このセクションでは、 keyパラメーターを使用して、並べ替えをカスタマイズしましょう。

ここで、 mod5()は、数値xを取り込んで、数値xを5で割ったときに余りを返す関数です。

 def mod5(x): return x % 5

そして、上記の関数をkeyとして使用したいと思います。

次に、次のコードセルを実行します。

 nums = [25,13,6,17,9] nums.sort(key = mod5) print(nums) # Output: [25, 6, 17, 13, 9]

出力を解析するのに少し時間がかかります。

通常の並べ替えの代わりに、 mod5であるkeyに従って並べ替えをカスタマイズしていることに注目してください。

  • 5で割ったときに最小の余りを残す数が最初になります。
  • そして、5で割ったときに最大剰余を残す数は、ソートされたリストの最後の要素です。

これが当てはまるかどうかを確認するには、次のコードスニペットを実行します。

 nums = [25,13,6,17,9] for num in nums: print(f"{num} leaves remainder {num%5} when divided by 5") # Output 25 leaves remainder 0 when divided by 5 13 leaves remainder 3 when divided by 5 6 leaves remainder 1 when divided by 5 17 leaves remainder 2 when divided by 5 9 leaves remainder 4 when divided by 5

5は25を正確に除算し、余りは0です。したがって、これがソート済みリストの最初の要素です。 6は余り1を残すので、2番目の要素になります。 9は、5で割ると余り4を残し、ソートされたリストの最後の要素です。

別の関数を定義する代わりに、ラムダ関数を使用することもできます。 Pythonでは、ラムダは1行の無名関数です。 lambda args:expressionは、 argsで計算されたを返します。

次に、以下に示すように、ラムダ式を使用して上記のソートを書き直してみましょう。

 nums = [25,13,6,17,9] nums.sort(key = lambda x:x%5) print(nums) # Output: [25, 6, 17, 13, 9]

これまで、数値のリストを並べ替える方法を学びました。 次に、Pythonで文字列のリストを並べ替える方法を見てみましょう。

Pythonリストをアルファベット順に並べ替える方法

このセクションでは、ハリーポッターに触発された例を使用して、文字列のリストを並べ替える方法を学習します。

python-sort-list

この例では、 studentsはホグワーツの学生のリストです。 そして、名前のアルファベット順に並べ替えたいと思います。

文字列のリストを並べ替える場合、デフォルトの並べ替えはアルファベット順になります。

 students = ["Harry","Ron","Hermione","Draco","Cedric"]

並べ替えの結果を確認するために、並べ替えられたリストを印刷してみましょう。

 students.sort() print(students) # Output ['Cedric','Draco', 'Harry', 'Hermione', 'Ron']

Pythonリストをアルファベットの逆順に並べ替える方法

リストをアルファベットの逆順に並べ替えるには、以下のコードスニペットに示すように、 reverse = Trueに設定します。

 students.sort(reverse = True) print(students) # Output ['Ron', 'Hermione', 'Harry', 'Draco', 'Cedric']

出力から、リストが実際に逆の順序でソートされていることがわかります。

キーパラメータの使用方法ソートのカスタマイズ

このセクションでは、オプションのkeyパラメータを使用して並べ替えをカスタマイズしましょう。

次のリスト、 housesを考えてみましょう。

 houses = [ {1:"Draco","house":"Slytherin"}, {2:"Harry","house":"Gryffindor"}, {3:"Cedric","house":"Hufflepuff"} ]

ここで、 housesは辞書のリストです。 各辞書には2つのキーと値のペアが含まれています。1つは学生の名前を示し、もう1つは学生が所属する家を示します。

ここで、このリストのを、それらが属する家のアルファベット順に並べ替えます。

ご想像のとおり、特定の学生の家にkeyパラメータを設定する必要があります。

各学生の家を取得するために、以下に示すように、関数returnHouse()を定義できます。

 def returnHouse(student): return student['house']

この関数は、特定の学生が属する家を返します。

これで、次に示すように、家のリストでsort()メソッドを呼び出すことができます。

 houses.sort(key=returnHouse)

以下の出力では、リストが学生の名前ではなく家によってどのようにソートされているかに注目してください。 そのため、グリフィンドール、ハッフルパフ、スリザリンをアルファベット順に並べています。

 print(houses) # Output [{2: 'Harry', 'house': 'Gryffindor'}, {3: 'Cedric', 'house': 'Hufflepuff'}, {1: 'Draco', 'house': 'Slytherin'}]

それに応じてkeyパラメーターを定義するには、ラムダ関数を使用することもできます。 この関数は、すべてのリストアイテムについて、そのリストアイテムの家を返します。

次のコードセルを実行して、これを確認します。

 houses.sort(key=lambda student:student["house"]) print(houses) # Output [{2: 'Harry', 'house': 'Gryffindor'}, {3: 'Cedric', 'house': 'Hufflepuff'}, {1: 'Draco', 'house': 'Slytherin'}]

これまでのすべての例では、リストでsort()メソッドを使用しました。 これで、元のリストが変更されることがわかりました。

元のリストをそのまま残し、リストのソートされたコピーを取得したい場合はどうなりますか?

Pythonでは、 sorted()関数を使用してこれを行うことができます。

Pythonの構文sorted()関数

sorted()関数は、引数としてリストまたは任意のコレクションを取ります。 また、リストのソートされたコピーを返します。元のリストは変更されません。

Pythonのsorted()関数の構文は次のとおりです。

 <sorted_copy> = sorted(<list>, reverse = True | False, key = <func>)

構文が前に見たsort()メソッドと非常に似ていることに注意してください。

  • <list>は、有効なPythonリストオブジェクトであり、必須パラメーターです。
  • reversekeyオプションのパラメーターです

:リストのみに作用するsort()メソッドとは異なり、 sorted()関数を使用して、リスト、文字列、辞書など、Pythonの反復可能なものを並べ替えることができます。

sorted()関数を使用してPythonリストを並べ替える方法

#1。 この例では、 numsは数値のリストです。

引数としてnumsを指定してsorted()関数を呼び出すことができます。 そしてそれをリストsorted_nums1に割り当てます。

 nums = [25,13,6,17,9] sorted_nums1 = sorted(nums) print(sorted_nums1) # Output: [6, 9, 13, 17, 25]

上記の出力では、 numsがデフォルトで昇順でソートされていることがわかります。

また、 sorted()は新しいリストを返すため、元のリストnumsは変更されないことに注意してください。 これは以下で確認されます。

 print(nums) # Output: [25, 13, 6, 17, 9]

#2 ここで、オプションのパラメーターreverseTrueに設定し、 sorted_nums2を取得します。

以下のコードセルに示されているように、 sorted_nums2は、アイテムが降順でソートされた新しいリストです。

 sorted_nums2 = sorted(nums,reverse = True) print(sorted_nums2) # Output: [25, 17, 13, 9, 6]

#3。 この例では、文字列のリストを操作してみましょう。

前の例と同様に、 sorted()関数を呼び出すと新しいリストが返されます。 そして、アイテムはアルファベット順にソートされています。

 fruits = ['pears','strawberry','apple','pineapple','blueberry'] sorted_fr1 = sorted(fruits) print(sorted_fr1) # Output: ['apple', 'blueberry', 'pears', 'pineapple', 'strawberry']

#4。 次に、オプションのkeyパラメータを使用して並べ替えをカスタマイズしましょう。 keylenに設定します。 これにより、文字列の長さに基づいてリストが並べ替えられます。

注: Pythonでは、組み込みのlen()関数は、リスト、文字列、タプルなどの反復可能なものをすべて取り込みます。 そして、iterableの長さを返します。

ソートされたリストの最初に最も短い文字列が表示され、ソートされたリストの最後に最も長い文字列が表示されます。

 fruits = ['pear','strawberry','apple','pineapple','blueberry'] sorted_fr2 = sorted(fruits,key=len) print(sorted_fr2) # Output: ['pear', 'apple', 'pineapple', 'blueberry', 'strawberry']

上記の出力では、が最も短い文字列で、イチゴが最も長い文字列です。

Pythonのsort()メソッドとsorted()関数

これまで、 sort()メソッドとsorted()関数の使用方法を学習しました。 このセクションでは、これら2つの方法の違いを列挙してみましょう。

Python .sort()メソッドPythonsorted()関数
リストを所定の場所に並べ替えます—元のリストを変更します新しいソート済みリストを返します
Pythonリストでのみ機能しますリスト、文字列、その他のコレクションなどのPython反復可能オブジェクトで動作します
リターンタイプはNone iterableのソートされたコピーを返します

まとめ

このPythonリストのチュートリアルがお役に立てば幸いです。

私たちがカバーしたことを簡単に要約しましょう。

  • list.sort(reverse = True | False、key = <func>)をオプションのreverseおよびkeyパラメーターとともに使用して、リストを所定の位置に並べ替えます。
  • ソートされたリストのコピーを取得するには、sorted(list、reverse = True | False、key = <func>)を使用します。

Pythonリストを並べ替える方法を学習したので、Pythonでのリスト内包表記について学習します。 または、Pythonでファイルを処理する方法やJSONファイルを操作する方法を学ぶこともできます。

GeekflareOnlinePythonコンパイラで上記の例を試すことができます。