MENU

Pythonでリスト内の最大値を求める方法|max()と比較の仕組みを解説

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)       # 2

Pythonのインデックスは「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)       # 1

2つ目の「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文による比較の流れを理解すると、「条件に合うデータの中から最もよいものを選ぶ」という処理へ応用できます。最大値を探す操作は、単なる関数の使い方ではなく、比較処理の基本を学べる題材です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次