2017-05-04 1 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이어야합니다.

6.40987284411

b = [] 
for i in a: 
    b.extend(i) 
print max(b) 
이것은, CPython과 파이썬 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 개 앞서 있기 때문에, 이전 서브리스트를 포함하는리스트가 최대로 선택됩니다. 두 번째 목록에서 같은 인덱스에서

, 우리는 01.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

모세는 왜 잘못된 결과를 얻었는지에 대해 이미 설명했습니다. 목록을 비교할 때 첫 번째 요소가 다른 "승리"보다 큽니다.

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

예, 그게 너무 작동합니다! –

+0

솔직히 나는'key'를'max'와 함께 사용하는 경우는 드물다. 최대 값에 관련된 데이터가 필요하지만 값 자체는 필요하지 않은 경우에만 흥미 롭습니다. –