Pythonのリストをソート(並び替え)する方法(sort() / sorted())
生徒
「Pythonでリストの中身を順番に並び替えたいんですが、どうすればいいですか?」
先生
「リストを並び替えるには、sort()やsorted()という便利な方法がありますよ。使い方には少し違いがあるので、それも一緒に学んでいきましょう。」
生徒
「並び替えって、数字でも文字でもできますか?」
先生
「はい。Pythonのリストなら数字も文字も簡単に並び替えられますよ。さっそく見ていきましょう!」
1. Pythonでリストを並び替える基本:sort()とsorted()
Pythonではリストの要素を並び替える(ソートする)方法として、次の2つがあります。
sort():リストそのものを並び替える(元の順番が変わる)sorted():新しい並び替え済みのリストを作る(元のリストはそのまま)
どちらも昇順(小さい順やあいうえお順)に並び替えるのが基本ですが、降順(大きい順や逆順)にもできます。
2. sort()の使い方と特徴
sort()メソッドは、リストの中身を直接並び替えます。リストが書き換わるので、元の順番は失われます。
numbers = [5, 2, 9, 1]
numbers.sort()
print(numbers)
[1, 2, 5, 9]
sort()は、リストの中身が数値や文字列などであれば、自動的に並び替えてくれます。
3. sorted()の使い方と特徴
sorted()関数は、元のリストを変更せずに、並び替えた新しいリストを作ってくれます。
fruits = ["みかん", "りんご", "バナナ"]
new_fruits = sorted(fruits)
print("元のリスト:", fruits)
print("並び替え後:", new_fruits)
元のリスト: ['みかん', 'りんご', 'バナナ']
並び替え後: ['バナナ', 'みかん', 'りんご']
元のリストを残しておきたいときは、sorted()を使うと安全です。
4. 降順に並び替えるには?reverse=Trueを使う
昇順ではなく、降順(大きい順・逆順)に並び替えたいときは、reverse=Trueというオプションを使います。
numbers = [10, 3, 7, 1]
numbers.sort(reverse=True)
print(numbers)
[10, 7, 3, 1]
sorted()でも同じようにreverse=Trueを指定できます。
5. アルファベットやひらがなも並び替えできる
文字列のリストも、sort()やsorted()で並び替えが可能です。ひらがなは「あいうえお順」、アルファベットはAからZの順になります。
animals = ["うさぎ", "いぬ", "ねこ", "さる"]
animals.sort()
print(animals)
['いぬ', 'うさぎ', 'さる', 'ねこ']
文字の順番は、辞書の順番や文字コードの並びによって決まっています。
6. リストを並び替えるときの注意点
リストに複数の型(たとえば数字と文字列)が混ざっていると、Pythonでは並び替えができません。エラーになります。
mix = [1, "りんご", 3]
mix.sort()
TypeError: '<' not supported between instances of 'str' and 'int'
並び替えるときは、リストの中身のデータ型が統一されていることを確認しましょう。
7. リストを逆順にするだけならreverse()
並び替えではなく、今の順番をそのまま反対にしたいときは、reverse()というメソッドを使います。
letters = ["a", "b", "c", "d"]
letters.reverse()
print(letters)
['d', 'c', 'b', 'a']
reverse()は並び替えではなく「順番をひっくり返す」操作です。
8. sorted()で並び替えたあとにスライスもできる
sorted()で新しいリストを作ったあとは、スライス(部分取り出し)も活用できます。
nums = [8, 3, 6, 1, 9]
top3 = sorted(nums)[-3:]
print(top3)
[6, 8, 9]
この例では、昇順で並び替えたあと、後ろから3つの要素を取り出しています。ランキング表示などに便利です。
9. キーワード引数keyを使ってカスタムソート
文字列の長さや、特定のルールで並び替えたいときは、key引数を使って並び順を決められます。
words = ["banana", "apple", "kiwi"]
words.sort(key=len)
print(words)
['kiwi', 'apple', 'banana']
このようにkey=lenと書くと、文字の長さを基準に並び替えることができます。
まとめ
Pythonでリストを並び替える方法として、sortとsortedは非常に重要であり、基本的なデータ操作から実務的な分析まで幅広く役立つ基礎知識です。今回の記事では、元のリストを直接変更するsortと、新しいリストを作り出すsortedの違いを中心に、それぞれの特徴や使いどころを詳しく確認しました。並び替えの処理は単純に思えるものの、昇順と降順の切り替え、データ型の扱い、文字列の並び順、長さやルールに基づいたカスタムソートなど、実際にプログラムで扱う際には多くのポイントを理解しておく必要があります。 sortは元のリストをそのまま書き換えてしまうため、変更後のデータしか残らなくなります。これは大規模なデータ処理の場面では、元データを保持しておきたい場合に注意が必要です。一方、新しいリストを返すsortedは、元のリストをそのまま保ちながら並び替え済みのリストを生成してくれるため、安全性が高く、さまざまな処理を組み合わせやすいという利点があります。用途によってどちらを使うべきかを判断することで、プログラムの見通しや保守性も向上します。 また、reverseを使った降順の操作は、ランキング表示やスコアの高い順に並べたい場合などに非常に便利です。データを視覚化する処理や、順位づけを行うアルゴリズムでもよく用いられるため、日常的に活用するスキルのひとつです。リストの逆順を単純に取得したいだけならreverseメソッドも活用でき、並び替えとは異なる単純な反転処理として覚えておくと役立ちます。 文字列の並び替えでは、ひらがな、かたかな、漢字、英字で順番の扱われ方が異なることを理解しておくと、データ整理や名前リストの管理などで正確な制御ができるようになります。特に日本語の場合、濁点や小文字などが関係するため、どのような基準で並び替えられているのかを認識しておくことが大切です。 さらに、複数の型が混ざったリストを並び替えようとするとエラーが発生する点は、Pythonにおける型の性質を理解する良いきっかけにもなります。実務ではデータのクレンジングや前処理が不可欠になることが多いため、並び替え処理によって型の不一致が明らかになるケースもあります。そうした場面では、型の統一、不要な値の除去、変換処理などを行いながら、安全にソートできる状態を整えることが重要です。 sortedとスライスを組み合わせることで、上位項目だけを取り出す、特定の範囲だけを抜き出すといった便利な使い方も可能になります。ランキング表示や上位分析を行う際には非常に役立ち、データ処理の幅を大きく広げてくれます。 さらに、key引数を使ったカスタムソートでは、文字列の長さ、特定の項目、独自のルールに基づく並び替えなど、実際の業務データ整理でもよく使われる手法です。Pythonのリスト操作の柔軟さを最大限に活かすためにも、keyを使う並び替えは必ず身に付けておきたい重要なスキルだといえます。 今回の記事では、基本から応用まで、あらゆる場面で活用できるリストの並び替えテクニックを幅広く確認しました。データ構造を理解しながら、実際にプログラムを書いて動かしていくことで、ソート処理の直感的な動きや細かなルールを自然と学ぶことができます。ぜひ、学んだ内容を繰り返し実践し、より高度なプログラム作成にも応用していってください。
numbers = [9, 3, 5, 1]
numbers.sort()
print(numbers)
fruits = ["りんご", "みかん", "バナナ"]
sorted_fruits = sorted(fruits)
print(sorted_fruits)
values = [10, 5, 8, 3]
descending = sorted(values, reverse=True)
print(descending)
words = ["apple", "banana", "kiwi"]
words.sort(key=len)
print(words)
生徒
「今日の内容で、sortとsortedの違いがよく分かりました。元のリストが変わるかどうかが大事ですね。」
先生
「そのとおりだよ。元のデータを残す必要があるならsortedを使うのが安心だね。用途で使い分けることが大切なんだ。」
生徒
「reverseを使うだけで降順にもできるのは便利だと思いました。ランキングも作れそうです!」
先生
「とても良い気づきだね。データ分析や表示でもよく使われるから、しっかり覚えておくといいよ。」
生徒
「keyを使って並び替えの基準を変えられるのも面白かったです。実務でも使えそうですね。」
先生
「その発想はとても良いね。必要に応じて柔軟に並び替えられることで処理の幅が広がるから、ぜひ活用していってね。」