2017-09-12 1 views
2

salary_dataはpythonのリストです。私は以下のようにループ内で列挙関数を使用したが、すべてうまくいった。ループの前に列挙を使用すると、どのように空のリストを取得できますか?

##salary_data = enumerate(salary_data) 
max_label = [i for i,x in enumerate(salary_data) if x==max(salary_data)] 
print max_label 

が、私は以下のように列挙関数を使用する場合、私は空のリストであり、ValueErrorをsalary_dataました:MAX()argが空sequence.Iあるのはなぜかわからないが。

salary_data = enumerate(salary_data) 
max_label = [i for i,x in salary_data if x==max(salary_data)] 
print max_label 
+0

あなたは、元の 'salary_data'ので、' X == MAX(salary_dataを捨てました) 'は間違ったところで' max'を呼び出しています。 – user2357112

答えて

3

enumerate(salary_data)あなたはenumerateに包みので、イテレータです。つまり、maxが間違ってになることを除いて)を呼び出すと、それは消耗(空)になります。

あなたは(再計算を避ける)前までの最大を計算する必要がありますし、その後、あなたはまた、enumerate Dデータを反復処理することができます:

max_ = max(salary_data) # avoids repeated maximum calculation in the loop 
salary_data_enumerated = enumerate(salary_data) # other variable name, for readability 
max_label = [i for i, x in salary_data_enumerated if x==max_] 
関連する問題