ホーム テクノロジー 開発 非公開: Python でリストを並べ替える方法

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


この記事では、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 リストを降順に並べ替える方法

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

 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のソートリスト
Pythonのソートリスト

この例では、 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次に、オプションのパラメーターreverse Trueに設定し、 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()関数はリスト、文字列、タプルなどの任意の反復可能関数を受け取ります。そして、反復可能の長さを返します。

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

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

# Output:
['pear', 'apple', 'pineapple', 'blueberry', 'strawberry']

上記の出力では、 pearが最も短い文字列であり、 strawberryが最も長い文字列です。

Python でリストを反転して逆方向にスピンする方法もお読みください。

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

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

Python .sort() メソッドPythonのsorted()関数
リストをその場で並べ替えます – 元のリストを変更します新しいソートされたリストを返します
Python リストでのみ動作しますリスト、文字列、その他のコレクションなどの Python 反復可能オブジェクトを操作します
戻り値の型はNoneです反復可能オブジェクトのソートされたコピーを返します。

まとめ 👩‍🏫

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

これまで説明した内容を簡単にまとめてみましょう。

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

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

Online Python Compiler で上記の例を試してみてください。

「 Python でリストを並べ替える方法」についてわかりやすく解説!絶対に観るべきベスト2動画

【毎日Python】Pythonのリストなどを並び替える方法|sorted
【こつこつPython】Pythonで配列を昇順に並び替える方法|numpy.sort,argsort