Python
 Computer >> コンピューター >  >> プログラミング >> Python

Python ValueError:max()argは空のシーケンスです解決策

max()メソッドは、少なくとも1つの値を持つシーケンスをメソッドに渡した場合にのみ機能します。

空のリストで最大のアイテムを見つけようとすると、「ValueError:max()」というエラーが発生します。 argは空のシーケンスです。」

このガイドでは、このエラーの意味と、このエラーが発生する理由について説明します。このエラーを解決する方法を理解するのに役立つ例を紹介します。

ValueError:max()argは空のシーケンスです

max() メソッドを使用すると、リスト内で最大のアイテムを見つけることができます。 min()に似ています リスト内の最小のアイテムを見つけるメソッド。

このメソッドを機能させるには、max() 少なくとも1つの値を持つシーケンスが必要です。これは、アイテムがない場合、リスト内で最大のアイテムを見つけることができないためです。検索するアイテムがないため、最大のアイテムは存在しません。

「ValueError:max()」のバリエーション 空のリストをmin()に渡そうとすると、「argは空のシーケンスです」というエラーが見つかります。 方法。このエラーは「ValueError:min()」です。 argは空のシーケンスです。」このmin() 同じ理由でエラーが発生します。値のないリストで最小値を見つけることができません。

シナリオ例

生徒がすべての化学テストで取得した最高の成績を見つけるプログラムを作成します。まず、学生のリストを定義します。

students = [
	   { "name": "Ron", "grades": [75, 92, 84] },
	   { "name": "Katy", "grades": [92, 86, 81] },
	   { "name": "Rachel", "grades": [64, 72, 72] },
	   { "name": "Miranda", "grades": [] }
]

私たちの学生リストには4つの辞書が含まれています。これらの辞書には、各学生の名前と、彼らが獲得した成績のリストが含まれています。ミランダは化学のクラスに参加したばかりなので、まだ成績がありません。

参加者の81%は、ブートキャンプに参加した後、自分たちの技術的な仕事の見通しについてより自信を持っていると述べました。今日のブートキャンプにマッチしましょう。

平均的なブートキャンプの卒業生は、ブートキャンプの開始から最初の仕事を見つけるまで、キャリアの移行に6か月も費やしませんでした。

次に、forループを使用して、学生のリスト内の各学生を調べ、各学生が獲得した最高の成績と各学生の平均成績を見つけます。

for s in students:
	     highest_grade = max(s["grades"])
	     average_grade = round(sum(s["grades"]) / len(s["grades"]))
	     print("The highest grade {} has earned is {}. Their average grade is {}.".format(s["name"], highest_grade, average_grade))

max()を使用します 学生が獲得した最高の成績を見つけるための関数。生徒の平均成績を計算するために、すべての成績の合計を、受け取った成績の数で割ります。

round()を使用して、各生徒の平均成績を最も近い整数に丸めます。 方法。

コードを実行して、何が起こるかを確認します。

The highest grade Ron has earned is 92. Their average grade is 84.
The highest grade Katy has earned is 92. Their average grade is 86.
The highest grade Rachel has earned is 72. Their average grade is 69.
Traceback (most recent call last):
  File "main.py", line 10, in <module>
	     highest_grade = max(s["grades"])
ValueError: max() arg is an empty sequence

リストの4番目の項目に到達するまで、コードは正常に実行されます。ロン、ケイティ、レイチェルの最高成績と平均成績を見ることができます。ミランダの値は表示されません。

ソリューション

私たちのコードは最初の3人の生徒で機能します。これは、これらの生徒のそれぞれが少なくとも1つの成績を持つ成績のリストを持っているためです。ミランダにはまだ成績がありません。

ミランダには成績がないため、max() 関数の実行に失敗します。 max() 空のリストで最大値が見つかりません。

このエラーを解決するには、リスト内の最高の成績を計算する前に、成績の各リストに値が含まれているかどうかを確認してください。リストに値が含まれていない場合は、ユーザーに別のメッセージを表示する必要があります。

計算を実行する前に、「if」ステートメントを使用して、生徒に成績があるかどうかを確認しましょう。

for s in students:
	     if len(s["grades"]) > 0:
	               highest_grade = max(s["grades"])
	               average_grade = round(sum(s["grades"]) / len(s["grades"]))
	               print("The highest grade {} has earned is {}. Their                average grade is {}.".format(s["name"], highest_grade, average_grade))
	     else:
		           print("{} has not earned any grades.".format(s["name"]))

上記のコードは、生徒が少なくとも1つの成績を取得している場合にのみ、生徒の最高成績と平均成績を計算します。それ以外の場合、ユーザーには、学生が成績を取得していないことが通知されます。コードを実行してみましょう:

The highest grade Ron has earned is 92. Their average grade is 84.
The highest grade Katy has earned is 92. Their average grade is 86.
The highest grade Rachel has earned is 72. Their average grade is 69.
Miranda has not earned any grades.

私たちのコードは、最初の3人の学生の最高成績と平均成績を正常に計算します。私たちのコードがミランダに到達したとき、私たちのコードは彼女の最高および平均の成績を計算しません。代わりに、私たちのコードは、ミランダがまだ成績を獲得していないことを通知します。

結論

「ValueError:max() max()を使用して空のリストで最大のアイテムを見つけようとすると、「argは空のシーケンスです」というエラーが発生します。 方法。

このエラーを解決するには、少なくとも1つの値を持つリストのみをmax()に渡すようにしてください。 声明。これで、プロのコーダーのようにこの問題を解決するために必要な知識が得られました!


  1. Pythonで空の辞書を作成するにはどうすればよいですか?

    代入ステートメントで中括弧で囲まれた要素を指定しないことにより、空の辞書オブジェクトを作成できます。空の辞書オブジェクトも、引数なしでdict()組み込み関数によって作成されます >>> L1 [] >>> d1 = {} >>> d1 {} >>> d1 = dict() >>> d1 {}

  2. Pythonで空のリストを作成するにはどうすればよいですか?

    代入ステートメントで角かっこで囲まれた要素を指定しないことにより、空のリストオブジェクトを作成できます。空のリストオブジェクトも、引数なしでlist()組み込み関数によって作成されます >>> L1 = [] >>> L1 [] >>> L1 = list() >>> L1 []