2017-05-04 5 views
3

pythonなぜmax(max(float_2d_array))が間違った答えを出すのですか?例えば

a = [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 
[0.0, 0.0, 1.2852976787772832, 0.00092, 0.0, 0.0, 0.0, 0.0, 0.0], 
[0.0, 0.0, 0.0, 6.409872844109646, 0.17506688391255013, 0.0, 0.0, 0.0, 0.0], 
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]] 
print max(max(a)) 
print max(a) 

結果である:

1.28529767878

[0.0、0.0、1.2852976787772832、0.00092、0.0、0.0、0.0、0.0、0.0]

これは明らかに間違っています。最大値は6.409872844109646です。

b = [] 
for i in a: 
    b.extend(i) 
print max(b) 

6.40987284411

これは、CPythonののpython 2.7です。

ありがとうございました。

+0

なぜあなたは6.409872844109646を期待している:

は、あなたがに持っている最大値はあなたのリストを平らに取得するには? .... 1.2852976787772832は私の最大のようです – depperm

+0

numpyで正しい答えを得ることができます: 'print numpy.max(a)' – Nuageux

+3

'max(a)'からのあなたの期待は正しくありません。それはあなたに最大数を持つリストを与えるつもりはありません。 – yeniv

答えて

6

リストは要素ごとにソートされます。 1.2852976787772832のインデックスは、候補サブリストの6.409872844109646より1つ先にあるので、前者を含むリストは最大として選択されます。第二のリスト内の同じインデックスに

、我々は0を持っていると1.2852976787772832明確に0より大きい:

実際に
[0.0, 0.0, 1.2852976787772832, 0.00092, 0.0, 0.0, 0.0, 0.0, 0.0], 
[0.0, 0.0, 0.0, 6.409872844109646, 0.17506688391255013, 0.0, 0.0, 0.0, 0.0] 
#   ^here's your tie-breaker 

6.4...を含む次のインデックスがチェックされることはありません。

最大サブリストをどのように選択するかわからない:最大合計を含むサブリスト、最大数を含むサブリスト?デフォルトの動作で切り捨てられない場合は、必要な動作をコーディングする必要があります。

+1

数字のリストを、説明のために - 文字のリストと考えることができる文字列と比較すると、メカニックがもっと明らかになるかもしれません。アルファベット順に、 "aba"は "aac"の後に来る。 "002"の背後にソートされた "010"についても同様です。 – aleneum

+1

ありがとう、モーセ! – user7586189

1

Mosesはなぜあなたが間違った結果を得たかについて説明しました:リストを比較するとき、最初の要素が他の要素よりも勝っています。

print(max(x for l in a for x in l)) 
+0

ええ、あまりにも動作します! –

+0

正直言って私は 'key'を' max'と使うことはめったにありません。最大値に関連するデータは必要ですが、値自体は必要ない場合は面白いです。 –

関連する問題