Pythonリストの最大値・合計・平均・並べ替えまとめ

「数値のリストから最大値や合計を出したいけれど、毎回for文を書くのは面倒」「平均や並べ替えはどう書けばいいのか」。Pythonでデータを扱い始めると、こうした場面にすぐ出会います。
数値リストの集計には、便利な組み込み関数が揃っています。組み込み関数とは、Pythonに最初から用意されていて、importなしで使える関数のことです。for文を書かなくても、1行で結果を取り出せます。この記事では、次の内容を順に紹介します。

  • 最大値・最小値・合計値の取得
  • 要素の数と平均値の計算
  • 並べ替えと上位・下位の取り出し
  • 四捨五入
  • 空のリストで起きるエラーの対処

リストから最大値・最小値を取得する

最大値はmax()、最小値はmin()にリストを渡すだけで取得できます。

list1 = [1,2,3,4,5,6,7,8,9,10]

max_value = max(list1)
print(max_value) # 10

min_value = min(list1)
print(min_value) # 1

リストの合計値を取得する

合計値はsum()で求められます。

list1 = [1,2,3,4,5,6,7,8,9,10]

sum_value = sum(list1)
print(sum_value) # 55

要素の数と平均値を求める

要素の数はlen()で分かります。

list1 = [1,2,3,4,5,6,7,8,9,10]

print(len(list1)) # 10

平均値を求める専用の組み込み関数はありません。合計を要素の数で割って求めます。

list1 = [1,2,3,4,5,6,7,8,9,10]
nums = [5,3,8,1,9,2]

print(sum(list1) / len(list1)) # 5.5
print(sum(nums) / len(nums)) # 4.666666666666667

標準ライブラリのstatistics.mean(list1)でも同じ5.5が得られます。ただし、これは組み込み関数ではなく標準ライブラリなので、import statisticsが必要です。

リストを並べ替える

並べ替えにはsorted()を使います。元のリストは変更せず、並べ替えた新しいリストを返します。

nums = [5,3,8,1,9,2]

print(sorted(nums)) # [1, 2, 3, 5, 8, 9]
print(sorted(nums, reverse=True)) # [9, 8, 5, 3, 2, 1]
print(nums) # [5, 3, 8, 1, 9, 2]

reverse=Trueを付けると降順になります。numsは並べ替え前のまま残っています。
「点数の上位3件だけ欲しい」ときは、並べ替えた結果をスライス[:3]で先頭から3件切り出します。

nums = [5,3,8,1,9,2]

print(sorted(nums, reverse=True)[:3]) # [9, 8, 5]
print(sorted(nums)[:3]) # [1, 2, 3]

降順の先頭3件が上位3件、昇順の先頭3件が下位3件です。
似たものにリストのメソッドnums.sort()があります。こちらは元のリストを直接書き換え、戻り値はNoneです。元のデータを残したいときはsorted()を選んでください。sorted(nums)のつもりでresult = nums.sort()と書くと、resultがNoneになってしまいます。

小数を四捨五入する

平均値は小数になることが多く、そのままだと桁が長くなります。四捨五入にはround()を使います。第2引数で小数点以下の桁数を指定できます。

list1 = [1,2,3,4,5,6,7,8,9,10]

print(round(3.14159, 2)) # 3.14
print(round(sum(list1) / len(list1))) # 6

桁数を省略すると整数に丸めます。平均の5.5は6になります。
注意したいのは、Pythonのround()が「ちょうど .5」のとき偶数に丸める仕様(銀行家丸め)である点です。学校で習う四捨五入と結果が違う場合があります。

print(round(2.5)) # 2
print(round(3.5)) # 4

2.5は3ではなく2になります。常に「5なら切り上げ」にしたい場面では、この仕様を頭に入れておいてください。

空のリストで起きるエラーと対処

データが0件のときに、関数ごとに動きが違うので注意が必要です。

  • max([])・min([]):ValueError: max() iterable argument is emptyが発生(minも同様のエラー)
  • sum([]):エラーにならず0を返す
  • sum([]) / len([]):ZeroDivisionError: division by zeroが発生

平均値の計算でZeroDivisionErrorが出るのは、len()が0になり、0で割ってしまうためです。平均を求める前に、要素が1個以上あるか確認してください。
max()とmin()は、default=を指定するとエラーを避けられます。空のリストのときは、指定した値を返します。

empty = []

print(sum(empty)) # 0
print(len(empty)) # 0
print(max(empty, default=0)) # 0

まとめ

やりたいこと 使うもの
最大値・最小値 max()・min()
合計値 sum()
要素の数 len()
平均値 sum() / len()
並べ替え(元のリストは残す) sorted()
四捨五入 round()
  • 平均を求める専用の組み込み関数はなく、sum() / len()で計算する
  • sorted()は新しいリストを返し、nums.sort()は元のリストを書き換える
  • round()は偶数に丸める仕様のため、一般的な四捨五入とずれる場合がある
  • 要素が0個のときは、max()・min()のValueErrorと、平均のZeroDivisionErrorに注意する
このエントリーをはてなブックマークに追加
にほんブログ村 IT技術ブログへ

コメント

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です