2014-01-13 2 views
3

파이썬에서 min (A, B, C, D)을 사용했습니다. 이것은 가장 낮은 값을 찾는 데 완벽하게 작동하지만, A, B, C 또는 D 중 하나에 null 값 (0 값)이 있으면 Null 값 (또는 0)을 반환합니다. 내 생각에 null이 아니거나 0이 아닌 값을 반환하는 방법에 대한 아이디어가 있습니까? 당신이파이썬을 사용하여 null이 아닌 가장 낮은 값을 찾으십시오.

min(filter(None, (A, B, C, D)) 

마지막으로 필터를 사용하여 발전기 표현

min(x for x in (A, B, C, D) if x) 

을 사용할 수 있습니다

min(A, B, C, D, key=lambda x:(x==0, x)) 

또는 감사

답변

6

나는 등 없음, 0, 거짓을 처리하지 않습니다 필터와 함께 갈 것입니다 ...

>>> min(filter(None, [1, 2, 0, None, 5, False])) 
1 

:

참고 filter (function, iterable)는 함수가 None이 아니라면 [function (item) iferable에있는 item에 대한 item]이고, function이면 [item의 경우 iterable에있는 item for item]과 동일하다. 없음

6

이 다른 쪽 끝을에 대한 0를 밀어 (최대 끝)를 사용하여 itertools.compress

에서
from itertools import compress 
min(compress((A, B, C, D), (A, B, C, D))) 
+0

내가 처음 해결책을 사랑입니다 - 나에게 그것을 grok 수 약간의 시간이 걸렸습니다. 더 자세히 설명해야합니다. 초심자라면 완전히 수수께끼가 될 것입니다. – volcano

1
min(v for v in (A,B,C,D) if not v in (None,0)) 
관련 문제