読み込み中...

Pythonでデータを整頓!ソートの6つの手法を学ぶ

Pythonで学ぶデータのソート手法の画像 Python
この記事は約7分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

本記事のサンプルコードを活用して機能追加、目的を達成できるように作ってありますので、是非ご活用ください。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を満たす現役のプログラマチームによって監修されています。

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

Pythonを使ってデータを整頓するのはとても重要なスキルです。

特に、大量のデータを扱うときに、データを特定の順序にソート(並び替え)することは、データ分析をより効果的に行うための基本的な手段となります。

本記事では、Pythonでデータをソートする6つの方法を学んでいきましょう。

●Pythonのソートとは

Pythonのソートとは、リストやタプルなどのデータを一定の順序に並べ替える操作のことを指します。

ソートには、昇順(小さいものから大きいものへ)や降順(大きいものから小さいものへ)など、様々な方法があります。また、ソートの基準を自分で定義することも可能です。

●Pythonでのソートの使い方

Pythonでは、ソート操作を行うための2つの基本的な方法が提供されています。

1つ目はリストオブジェクトのsortメソッド、2つ目はビルトインのsorted関数です。

それぞれの方法を詳しく見ていきましょう。

○基本的なソート

Pythonのリストオブジェクトには、sortメソッドという関数が付属しています。

これを使うと、リスト内の要素を昇順にソートすることができます。

□サンプルコード1:リストをソートする

このコードでは、Pythonのリストに含まれる数値を昇順にソートする方法を紹介します。

この例では、sortメソッドを使ってリストを直接ソートします。

numbers = [5, 2, 3, 1, 4]
numbers.sort()
print(numbers)

上記のコードを実行すると、numbersリストの要素が昇順に並び替えられます。

結果は「[1, 2, 3, 4, 5]」となります。

○逆順ソート

逆順にソートするには、sortメソッドまたはsorted関数の引数に「reverse=True」を指定します。

これにより、リストの要素が降順に並び替えられます。

□サンプルコード2:リストを逆順にソートする

このコードでは、Pythonのリストに含まれる数値を降順にソートする方法を紹介します。

この例では、sortメソッドとreverseパラメータを使ってリストを逆順にソートします。

numbers = [5, 2, 3, 1, 4]
numbers.sort(reverse=True)
print(numbers)

上記のコードを実行すると、numbersリストの要素が降順に並び替えられます。

結果は「[5, 4, 3, 2, 1]」となります。

○カスタムソート

Pythonのソートでは、基準となる値を自分で定義することが可能です。

これには、sortメソッドまたはsorted関数の引数に「key=関数」を指定します。

ここでいう関数は、ソートの基準となる値を返すものです。

□サンプルコード3:カスタムソート関数を使う

このコードでは、文字列の長さを基準にソートするカスタムソートの方法を紹介します。

この例では、keyパラメータにlen関数(文字列の長さを返す関数)を指定してソートします。

words = ['apple', 'banana', 'cherry', 'date']
words.sort(key=len)
print(words)

上記のコードを実行すると、wordsリストの要素が文字列の長さ順(昇順)に並び替えられます。

結果は「[‘date’, ‘apple’, ‘cherry’, ‘banana’]」となります。

○ソートの安定性

Pythonのソートは「安定」です。

つまり、等しい値を持つ要素の相対的な順序は、ソート前後で変わりません。

これは、例えば、複数のキーでソートする場合に重要な性質となります。

□サンプルコード4:ソートの安定性の検証

このコードでは、Pythonのソートが安定であることを確認する方法を紹介します。

この例では、元のリストのインデックスを含むタプルを作り、それを元にソートを行います。

items = [(3, 'apple'), (2, 'banana'), (2, 'cherry'), (1, 'date')]
items.sort()
print(items)

上記のコードを実行すると、itemsリストの要素がタプルの第一要素でソートされ、第一要素が等しい場合は元の順序が保たれます。

結果は「[(1, ‘date’), (2, ‘banana’), (2, ‘cherry’), (3, ‘apple’)]」となります。

●Pythonソートの応用例

Pythonのソート機能は、これまで紹介した基本的な機能を組み合わせることで、さまざまな応用が可能です。

ここでは、複数のキーでソートする方法と、ソートとビルトイン関数の組み合わせについて説明します。

○複数のキーでソート

Pythonのソートでは、複数のキーを基にソートすることも可能です。

これは、要素がタプルやリストで、それぞれの要素がソートのキーになる場合などに有用です。

□サンプルコード5:複数のキーでソートする

このコードでは、複数のキーを基にソートする方法を紹介します。

この例では、タプルのリストを、最初の要素でソートし、それが同じ場合は次の要素でソートします。

items = [('apple', 3), ('banana', 2), ('cherry', 2), ('date', 1)]
items.sort()
print(items)

上記のコードを実行すると、itemsリストの要素が最初の要素でソートされ、それが等しい場合は次の要素でソートされます。

結果は「[(‘date’, 1), (‘banana’, 2), (‘cherry’, 2), (‘apple’, 3)]」となります。

○ソートとビルトイン関数の組み合わせ

Pythonのビルトイン関数とソートを組み合わせることで、より高度なデータ処理が可能になります。

例えば、リスト内の要素をソートした後に、map関数を用いて変換することも可能です。

□サンプルコード6:ソートとビルトイン関数の組み合わせ

このコードでは、ソートしたリストの各要素を二乗する方法を紹介します。

この例では、ソートとmap関数を組み合わせています。

numbers = [5, 2, 3, 1, 4]
numbers.sort()
squared = list(map(lambda x: x**2, numbers))
print(squared)

上記のコードを実行すると、numbersリストの要素が昇順にソートされた後、各要素が二乗されます。結果は「[1, 4, 9, 16, 25]」となります。

●ソート関数の注意点と対処法

Pythonのソート関数は非常に便利ですが、いくつか注意すべき点があります。

まず、リストのsortメソッドは元のリストを直接変更します。

これは、元のリストの順序を保持したい場合には問題になります。

この問題を避けるためには、sorted関数を使うか、リストをコピーしてからsortメソッドを呼び出すことが推奨されます。

また、ソートに失敗するとエラーが発生します。

これは、例えば、異なるタイプの要素を含むリストをソートしようとした場合などに起こります。

この問題を避けるためには、全ての要素が同じタイプであることを確認するか、ソートのキーを提供する関数を使用すると良いでしょう。

●Pythonのソートをカスタマイズする方法

Pythonのソート関数は、引数keyに関数を指定することで、独自のソート基準を定義することが可能です。

この関数は、リストの各要素を引数に取り、ソートの基準となる値を返すものです。

これにより、例えば文字列の長さ順にソートする、辞書の特定のキーの値でソートする、といったことが可能になります。

また、引数reverseにTrueを指定することで、ソートの順序を逆にすることもできます。

これにより、昇順ではなく降順にソートすることが可能となります。

まとめ

Pythonを使ってデータを整頓する方法は多種多様ですが、その中でもソートは非常に重要な操作です。

Pythonの標準ライブラリには便利なソート関数が提供されており、これを使えば、基本的なソートからカスタムソート、高度なソートまで、様々なソート操作が可能となります。

この記事を参考に、Pythonのソート関数を活用して、データ整頓を効率よく行いましょう。