【Python】レッスン4-04:リストの集計・並べ替えを理解しよう

ながみえ
【Python学習記事のアイキャッチ画像】Lesson4-4 リストの集計と並び替えを理解しよう

一つ前のLessonではリストの情報調査について学習しました。

今回はリストの集計・並べ替えについて見ていきましょう。

Lesson1:基礎文法編
Lesson2:制御構造編
Lesson3:関数とスコープ編

Lesson4:データ構造編
・Lesson4-1:リストの定義と要素の追加を理解しよう
・Lesson4-2:リストの要素を削除しよう
・Lesson4-3:リストの情報を調べよう
・Lesson4-4:リストの集計・並べ替えを理解しよう ◁今回はココ
・Lesson4-5:リストのスライスを理解しよう
・Lesson4-6:リストのループ処理を理解しよう
・Lesson4-7:リストの内包表記を理解しよう
・Lesson4-8:リスト・タプル・辞書・集合の概要と違いを理解しよう
・Lesson4-9:タプルの基本を理解しよう
・Lesson4-10:タプルのアンパックを理解しよう
・Lesson4-11:辞書の基本を理解しよう
・Lesson4-12:辞書のループ処理を理解しよう
・Lesson4-13:辞書の内包表記を使ってリストから辞書を作ろう
・Lesson4-13:集合(セット)の基本を理解しよう
・練習問題4-1:宝探しゲームを作ろう
・練習問題4-2:ナインゲームを作ろう 
・練習問題4-3:マルバツゲームを作ろう
Lesson5:オブジェクト指向編
次のステップ:Python基礎習得者にお勧めの道5選(実務or副業)

<<前のページ

【Python学習記事のアイキャッチ画像】Lesson4-3 リストの情報出力を理解しよう

Pythonの記事一覧

Python学習カテゴリの親ページ用アイキャッチ画像(テキスト&問題集)、記事一覧へのリンク案内

次のページ>>

【Python学習記事のアイキャッチ画像】Lesson4-5 リストのスライスを理解しよう

リスト集計と並べ替えの基本と使い分け

リストの集計・並べ替えは、数値データを扱ううえで欠かせない基本操作です。

本記事では、min/max/sum といった集計系の組み込み関数や、sort/sorted/reverse による並べ替えの考え方を整理し、昇順・降順、キー指定によるカスタムソートまでをコンパクトに解説します。

それでは、集計と並べ替えの基本から使い分けまで一気に押さえていきましょう。本文へ進み、手を動かしながら身につけてください。

【Python】勉強猫がノートパソコンを前にして学習を始める様子。記事内の学習スタート用イラスト

リストの集計|min, max, sum関数の使い方

リストの集計に使える主な関数として、min()関数, max()関数, sum()関数 があります。

これらの関数を使うことで、リスト内の数値の最小値、最大値、合計値を簡単に取得することができます。

  • min()関数: リストの中で最も小さい値を返します。
  • max()関数: リストの中で最も大きい値を返します。
  • sum()関数: リスト内の全ての要素を合計して返します。
numbers = [10, 5, 3, 8, 15] # 5つの数値を要素に持つリストを作成し、変数numbersに代入

# 最小値を取得
min_value = min(numbers) # min()関数でnumbers内の最小値を取得して変数min_valueに代入
print(f"最小値: {min_value}")

# 最大値を取得
max_value = max(numbers) # max()関数でnumbers内の最大値を取得して変数max_valueに代入
print(f"最大値: {max_value}")

# 合計を取得
sum_value = sum(numbers) # sum()関数でnumbers内の要素の合計を取得して変数sum_valueに代入
print(f"合計: {sum_value}")

上記のコードではリストnumbersから最小値、最大値、合計をそれぞれ取得しています。

結果としてmin()関数は3、max()関数は15、sum()関数は41を返します。

最小値: 3
最大値: 15
合計: 41

リストの並べ替え|sort, sorted, reverseメソッドの使い方

リストの要素を並べ替えるためにsort()メソッドやsorted()関数を使用します。これによりリストを昇順または降順に並べ替えることができます。

またreverse()メソッドを使うと、リストの要素の順序を逆転させることも可能です。

  • sort()メソッド: リストをその場で昇順に並べ替えます(破壊的操作)。
  • sorted()関数: リストを昇順に並べ替えた新しいリストを返します(非破壊的操作)。
  • reverse()メソッド: リストの要素を逆順に並べ替えます(破壊的操作)。
numbers = [10, 5, 3, 8, 15]

# リストを昇順に並べ替え
numbers.sort() # sort()メソッドでnumbersの要素を昇順に並び替え
print(f"昇順: {numbers}")

# リストを降順に並べ替え
numbers.sort(reverse=True) # sort()メソッドにキーワード引数reverseを付けてnumbersの要素を降順に並び替え
print(f"降順: {numbers}")

# 新リストの作成
new_numbers = sorted(numbers) # sprter()関数で、numbersの要素を昇順に並べた新リストを作成し、変数に代入
print(f"新リスト(昇順): {new_numbers}")

# リスト(8行目で降順に並び替え済み))を逆順にする
numbers.reverse() # reverse()メソッドでnumbersの要素を逆順に並び替え
print(f"逆順: {numbers}")

このコードではリストnumbersを昇順と降順に並べ替え、さらにreverse()メソッドで要素の順番を逆転させています。

昇順: [3, 5, 8, 10, 15]
降順: [15, 10, 8, 5, 3]
新リスト(昇順): [3, 5, 8, 10, 15]
逆順: [3, 5, 8, 10, 15]
参考資料

破壊的操作は、データを直接変更する操作で、元の状態に戻すことができません。例えばsort()メソッドはリストを並べ替え、元のリストに上書きします。

一方、非破壊的操作は元のデータを変更せず、新しいデータを生成します。sorted()関数は元のリストをそのまま残して、並べ替えられた新しいリストを返します。

破壊的操作はメモリ効率を優先したいときに、非破壊的操作は元データを保持したい場合に使用します。

状況に応じて使い分けましょう。

リストの集計・並べ替えの実例

最後にリストの集計や並べ替えをまとめた実例を見てみましょう。

以下のコードはリストの要素を集計し、並べ替え、逆順にする一連の流れを示しています。

numbers = [4, 7, 1, 12, 9]

# 最小値、最大値、合計の取得
min_value = min(numbers)
max_value = max(numbers)
sum_value = sum(numbers)

print(f"リスト: {numbers}")
print(f"最小値: {min_value}, 最大値: {max_value}, 合計: {sum_value}")

# リストを昇順に並べ替え
numbers.sort()
print(f"昇順: {numbers}")

# リストを逆順に並べ替え
numbers.reverse()
print(f"逆順: {numbers}")

このコードを実行すると、リストの集計結果と並べ替えの結果が順番に表示されます。

リスト: [4, 7, 1, 12, 9]
最小値: 1, 最大値: 12, 合計: 33
昇順: [1, 4, 7, 9, 12]
逆順: [12, 9, 7, 4, 1]

まとめ|集計と並べ替えの要点を一度で整理

ここまでで、リストの集計では min/max/sum(+sum×lenで平均)を、並べ替えでは sort()(破壊的)/sorted()(新しいリスト)/reverse()(順序反転) の特徴と使い分けを押さえました。

これにより、最小・最大・合計・平均の算出から、昇順・降順・keyパラメータによるカスタムソート、既存リストの更新/非更新の選択まで、目的に応じた最短手で書けるようになりました。

あとは小さなデータで手を動かして、今日のポイントを自分のコードに落とし込んでみましょう。

短い練習の積み重ねが、読みやすく再利用しやすいコードづくりに直結します。

Q
サイト改善アンケート|ご意見をお聞かせください(1分で終わります)

本サイトでは、みなさまの学習をよりサポートできるサービスを目指しております。
そのため、みなさまの「プログラミングを学習する理由」などをアンケート形式でお伺いしています。

1分だけ、ご協力いただけますと幸いです。

【Python】サイト改善アンケート
1.このサイトをどのように活用していますか?また、今後どのように活用したいですか?
5.気になっているサービス・商品があれば教えてください。
(複数選択可)
※ 特定の記事に関する内容の場合は、記事番号(Python Lesson〇-〇)をご記入願います。

練習問題:リストの集計・並べ替えを体験しよう

この記事で学習した「リストの集計・並べ替え」を復習する練習問題に挑戦しましょう。

【Python】勉強猫がノートパソコンに向かい、練習問題に挑戦する様子。記事内の休憩用イラスト

問題|テストの点数を集計して並べ替えよう

テストの点数(100点満点)をリストに格納し、以下の操作を行うプログラムを作成してください。

プログラムではリスト内の点数を集計し、最小値・最大値・合計・平均点を出力します。

その後、点数を昇順に並べ替え、さらに逆順に並べ替えた結果も表示します。

以下の要件に従ってコードを完成させてください。

  • scoresという名前のリストに、テストの点数を5つ格納すること(例: [88, 74, 95, 62, 80])。
  • min()関数を使って、最小点を取得し表示すること。
  • max()関数を使って、最大点を取得し表示すること。
  • sum()関数を使って、全ての点数の合計を表示すること。
  • 平均点を計算し、少数第2位まで表示すること。
  • sort()メソッドを使って、点数を昇順に並べ替え、表示すること。
  • reverse()メソッドを使って、点数を逆順に並べ替え、表示すること。

ただし、以下のような実行結果となるコードを書くこと。

最も低い点数: 62点
最も高い点数: 95点
合計点数: 399点
平均点: 79.80点
昇順に並べ替えた点数: [62, 74, 80, 88, 95]
逆順に並べ替えた点数: [95, 88, 80, 74, 62]

ヒント|難しいと感じる人だけ見よう

1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。

Q
ヒント1【コードの構成を見る】

正解のコードは上から順に以下のような構成となっています。
(※下記の□はコード内のインデントを表しています)

1:点数リストを用意し、最小・最大・合計・平均を計算して結果を表示する
 ・リストは変数に代入して作成:scores = [88, 74, 95, 62, 80]
 ・集計は組み込み関数で:min(scores), max(scores), sum(scores), len(scores)
 ・平均の計算:average_score = sum_scores / len(scores)

2:昇順に並べ替えたあと、その並びをそのまま逆順へ反転して結果を確認する
 ・昇順の並べ替えは 破壊的(in-place) に行う:scores.sort()
 ・並べ替え後の状態をそのまま表示:print(f"昇順に並べ替えた点数: {scores}")
 ・逆順への反転も in-placescores.reverse()
 ・反転後の状態を表示:print(f"逆順に並べ替えた点数: {scores}")

Q
ヒント2【穴埋め問題にする】

以下のコードをコピーし、コメントに従ってコードを完成させて下さい。

# テストの点数(100点満点)のリストを定義します
scores = [88, 74, 95, 62, 80]

# リストの集計
min_score = '''(穴埋め)'''(scores)		# リスト内の最も低い点数を取得
max_score = max(scores)		# リスト内の最も高い点数を取得
sum_scores = '''(穴埋め)'''(scores)	# リスト内の全ての点数の合計を取得
average_score = sum_scores / '''(穴埋め)'''(scores)	# 平均点を計算

# 集計結果を表示
print(f"最も低い点数: {min_score}点")
print(f"最も高い点数: {max_score}点")
print(f"合計点数: {sum_scores}点")
print(f"平均点: {average_score:.2f}点")	# 小数点以下2桁まで表示

# リストを昇順に並べ替え
scores.sort()	# リストを昇順に並べ替え
print(f"昇順に並べ替えた点数: {scores}")

# リストを逆順に並べ替え
'''(穴埋め)ここに reverse() でリストを逆順に並べ替えるコードを書く'''
print(f"逆順に並べ替えた点数: {scores}")

このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。

解答例|点数リストの集計と並べ替えプログラム

例えば以下のようなプログラムが考えられます。

Q
正解コード
# テストの点数(100点満点)のリストを定義します
scores = [88, 74, 95, 62, 80]

# リストの集計
min_score = min(scores)		# リスト内の最も低い点数を取得
max_score = max(scores)		# リスト内の最も高い点数を取得
sum_scores = sum(scores)	# リスト内の全ての点数の合計を取得
average_score = sum_scores / len(scores)	# 平均点を計算

# 集計結果を表示
print(f"最も低い点数: {min_score}点")
print(f"最も高い点数: {max_score}点")
print(f"合計点数: {sum_scores}点")
print(f"平均点: {average_score:.2f}点")	# 小数点以下2桁まで表示

# リストを昇順に並べ替え
scores.sort()	# リストを昇順に並べ替え
print(f"昇順に並べ替えた点数: {scores}")

# リストを逆順に並べ替え
scores.reverse()	# リストを逆順に並べ替え
print(f"逆順に並べ替えた点数: {scores}")

解答例の解説|点数リストの集計と並べ替えプログラムの考え方

解答例の詳細解説は以下の通りです。

Q
詳細解説

点数リストを用意し、最小・最大・合計・平均を計算して結果を表示する

# テストの点数(100点満点)のリストを定義します
scores = [88, 74, 95, 62, 80]

# リストの集計
min_score = min(scores)		# リスト内の最も低い点数を取得
max_score = max(scores)		# リスト内の最も高い点数を取得
sum_scores = sum(scores)	# リスト内の全ての点数の合計を取得
average_score = sum_scores / len(scores)	# 平均点を計算

# 集計結果を表示
print(f"最も低い点数: {min_score}点")
print(f"最も高い点数: {max_score}点")
print(f"合計点数: {sum_scores}点")
print(f"平均点: {average_score:.2f}点")	# 小数点以下2桁まで表示

まず、5つのテスト点をまとめたリストを作ります。
次に、組み込み関数を使って最も低い点・最も高い点・全体の合計を求めます。
平均は、合計を要素数で割って計算します。最後に、それぞれの値を日本語のラベルと一緒に表示します。
平均は小数点以下2桁で読みやすく整えて出力します。

昇順に並べ替えたあと、その並びをそのまま逆順へ反転して結果を確認する

# リストを昇順に並べ替え
scores.sort()	# リストを昇順に並べ替え
print(f"昇順に並べ替えた点数: {scores}")

# リストを逆順に並べ替え
scores.reverse()	# リストを逆順に並べ替え
print(f"逆順に並べ替えた点数: {scores}")

ここでは、いま持っている点数のリストを小さい順に並べ替えます。
並べ替えはリスト自身を書き換える方法で行われるため、実行後は同じ変数の中身が昇順に変わります。
続いて、その並び順をそのままひっくり返して逆順にします。
各操作の直後にリストの状態を表示し、昇順と逆順の違いを目で確認します。

もっと分かりやすい学習サイトにするために

この記事を読んで「ここが分かりにくかった」「ここが難しかった」等の意見を募集しています。

世界一わかりやすいPython学習サイトにするため、ぜひ 問い合わせフォーム からご意見下さい。

<<前のページ

【Python学習記事のアイキャッチ画像】Lesson4-3 リストの情報出力を理解しよう

Pythonの記事一覧

Python学習カテゴリの親ページ用アイキャッチ画像(テキスト&問題集)、記事一覧へのリンク案内

次のページ>>

【Python学習記事のアイキャッチ画像】Lesson4-5 リストのスライスを理解しよう

リストの集計・並べ替えの疑問解消|FAQと用語のまとめ

初心者がつまずきやすいポイントをFAQとしてまとめ、またよく使う専門用語をわかりやすく整理しました。

理解を深めたいときや、ふと疑問に感じたときに役立ててください。

FAQ|リストの集計・並べ替えに関するよくある質問

Q
Q1. リスト内の値の平均はどう計算しますか?

組み込み関数sum()len()を使って sum(list) / len(list) とするのが基本です。複雑な計算にはstatisticsモジュールが便利です。

Q
Q2. sort()とsorted()の違いは何ですか?

sort()はリストをその場で変更し、戻り値はNone。一方、sorted()新しいリストを返すため、元のリストを保持したまま並び替えできます。

Q
Q3. リストを降順に並べるにはどうしますか?

sort(reverse=True) または sorted(list, reverse=True) を使用することで、リストを降順に並べ替え可能です。

Python用語集|リストの集計・並べ替えに関する用語一覧

今回の記事で出てきた用語・関数などを一覧で紹介します。

このサイトに出てくる 全てのPython用語をまとめた用語集 も活用してください。

Python用語定義・使い方の概要解説記事へのリンク
リスト順序付きの複数の値を格納するデータ構造。要素の変更や操作が可能Lesson4-1
min() 関数イテラブルの中で最も小さい値を返す組み込み関数本記事
max() 関数イテラブルの中で最も大きい値を返す組み込み関数本記事
sum() 関数数値のイテラブルの合計値を返す組み込み関数本記事
sort() メソッドリスト自身を昇順(または指定順)に並び替えるメソッド。元のリストが変更される(破壊的)本記事
sorted() 関数イテラブルを並び替えて新しいリストを返す関数。元のデータは変更されない(非破壊的)本記事
reverse() メソッドリストの要素順序を逆に並べ替える破壊的メソッド本記事
破壊的操作元のデータそのものを変更する操作。sort()reverse() などが該当本記事
非破壊的操作元のデータを変更せず、新しい値や構造を返す操作。sorted() などが該当本記事
キーワード引数関数呼び出し時に引数名を指定して値を渡す方法。引数の順序に依存せず明示的に設定可能なし
記事URLをコピーしました