Pythonでデータを扱っていると、リストの中から最も大きい値を調べたい場面があります。
例えば、テストの最高点、商品の最高価格、ゲームのハイスコアなどを探す場合です。
Pythonでは「max()」を使うと、リスト内の最大値を簡単に取得できます。ただし、関数の書き方だけでなく、値がどのように比較されているのかを理解すると、ほかの処理にも応用しやすくなります。
この記事では、「max()」の基本的な使い方から、for文で最大値を探す仕組み、空のリストに対する注意点まで初心者向けに解説します。
max()で最大値を求める
リスト内の最大値を求める最も簡単な方法は、「max()」を使うことです。
# テストの点数
scores = [72, 85, 91, 68, 79]
# 最大値を取得
highest_score = max(scores)
# 結果を表示
print(highest_score) # 91「max()」に数値のリストを渡すと、その中で最も大きい値が返されます。
この例では、「91」がリスト内の最大値です。
72、85、91、68、79 → 最大値は91最大値だけを知りたい場合は、「max()」を使うのが最も短く分かりやすい方法です。
小数や負の数にも使える
「max()」は整数だけでなく、小数にも使えます。
# 商品の評価
ratings = [3.8, 4.2, 4.7, 4.1]
# 最も高い評価を取得
highest_rating = max(ratings)
print(highest_rating) # 4.7負の数が入ったリストでも、通常どおり比較されます。
# すべて負の数
numbers = [-20, -5, -12, -8]
# 最大値を取得
largest = max(numbers)
print(largest) # -5すべて負の数の場合、最も「0に近い値」が最大値になります。
「-5」は「-8」や「-20」より大きいため、このリストの最大値です。
最大値は、見た目の数字が大きいものではなく、数直線上で最も右にある値だと考えると分かりやすくなります。
for文で最大値を探す
「max()」を使わず、for文で値を一つずつ比較して最大値を探すこともできます。
# 数値のリスト
numbers = [18, 7, 25, 3, 12]
# 最初の値を仮の最大値にする
largest = numbers[0]
# リストの値を順番に確認
for number in numbers:
# より大きい値が見つかったら更新
if number > largest:
largest = number
# 結果を表示
print(largest) # 25最初に、リストの先頭にある「18」を仮の最大値にします。
その後、ほかの値と順番に比較します。
最初の最大値:18
7と比較:18のまま
25と比較:25に更新
3と比較:25のまま
12と比較:25のまま最後まで比較したときに残っている「25」が最大値です。
これは、参加者が一人ずつ現在のチャンピオンに挑戦し、勝った値が新しいチャンピオンになるような処理です。
この「現在の最大値を記録し、より大きい値が見つかったら更新する」という考え方は、最高価格の商品や最も成績のよいデータを探す場合にも応用できます。
最初の値を仮の最大値にする理由
for文で最大値を探すときは、最初の値を仮の最大値にすることが大切です。
次のように「0」から始めると、正しい結果にならない場合があります。
# すべて負の数
numbers = [-20, -5, -12]
# 0を仮の最大値にする
largest = 0
for number in numbers:
if number > largest:
largest = number
print(largest) # 0リストには「0」が入っていないにもかかわらず、結果が「0」になっています。
すべての要素が「0」より小さいため、最大値が一度も更新されないからです。
そのため、リストの先頭を仮の最大値として使います。
numbers = [-20, -5, -12]
# 実際に存在する最初の値から始める
largest = numbers[0]
for number in numbers:
if number > largest:
largest = number
print(largest) # -5比較の開始地点には、リスト内に実際に存在する値を使うと安全です。
最大値がある位置を調べる
最大値だけでなく、それがリストの何番目にあるのかを知りたい場合は、「index()」と組み合わせます。
# テストの点数
scores = [72, 85, 91, 68, 79]
# 最大値を取得
highest_score = max(scores)
# 最大値のインデックスを取得
position = scores.index(highest_score)
print(highest_score) # 91
print(position) # 2Pythonのインデックスは「0」から始まるため、インデックス「2」は先頭から3番目を意味します。
人が数える順番で表示したい場合は、「1」を加えます。
scores = [72, 85, 91, 68, 79]
highest_score = max(scores)
position = scores.index(highest_score)
# 人が数える順番に直して表示
print(position + 1) # 3同じ最大値が複数ある場合、「index()」で取得できるのは最初に見つかった位置です。
scores = [80, 95, 72, 95]
highest_score = max(scores)
position = scores.index(highest_score)
print(highest_score) # 95
print(position) # 12つ目の「95」の位置は返されないため、同じ最大値をすべて探したい場合には別の処理が必要です。
文字列のリストにも使える
「max()」は文字列のリストにも使えます。
words = ["apple", "banana", "orange"]
largest_word = max(words)
print(largest_word) # orange文字列の場合は、文字の並び順を基準に比較されます。
ただし、「最も文字数が多い単語」を取得しているわけではありません。文字数を基準にしたい場合は、「key」に「len」を指定します。
words = ["cat", "elephant", "dog"]
# 文字数が最も多い単語を取得
longest_word = max(words, key=len)
print(longest_word) # elephant「何を基準に最大と判断するのか」によって、結果が変わる点を覚えておきましょう。
空のリストには注意する
要素が一つもない空のリストに「max()」を使うと、エラーが発生します。
# 空のリスト
numbers = []
# 比較する値がないためエラーになる
largest = max(numbers)最大値を決めるには、少なくとも一つの値が必要です。
実際のプログラムでは、先にリストの中身を確認すると安全です。
numbers = []
# データがある場合だけ最大値を求める
if numbers:
print(max(numbers))
else:
print("データがありません")空のリストに対して「0」を最大値として返す方法もありますが、本当に「0」として扱ってよいかはデータの意味によって異なります。
例えば、最高得点が「0点」なのか、得点データが存在しないのかは同じではありません。
「値がない状態」と「最大値が0である状態」を区別することが、正確なデータ処理につながります。
まとめ
Pythonでリスト内の最大値を求める場合は、「max()」を使います。
numbers = [18, 7, 25, 3, 12]
largest = max(numbers)
print(largest) # 25この記事で紹介したポイントは次のとおりです。
- 「max()」でリスト内の最大値を取得できる
- 小数や負の数も比較できる
- for文では、現在の最大値を記録しながら比較する
- 仮の最大値にはリストの先頭要素を使う
- 「index()」を使うと最大値の位置も調べられる
- 空のリストに「max()」を使うとエラーになる
- 「key」を指定すると比較の基準を変更できる
普段は「max()」を使えば簡単に最大値を取得できます。
一方で、for文による比較の流れを理解すると、「条件に合うデータの中から最もよいものを選ぶ」という処理へ応用できます。最大値を探す操作は、単なる関数の使い方ではなく、比較処理の基本を学べる題材です。

