2012-12-09 4 views
0
def min_value(L) 

'' 'L은 -1보다 큰 정수의 목록입니다. L의 최소치를 -1보다 큰 값으로 되 돌린다. L -1 이외의 그 어떤 값이없는 경우 -1을 반환합니다. '' '목록의 최소값 정보

ans = -1 
for n in L: 
    if n> -1: 
     if ans == -1: <------------?? Can someone explain why they are doing this. Isn't ans already equal -1?? Thus processing ans = n every time?? 
      ans = n 
     else: 
      ans = min(ans, n) 
return ans 

ANYHELP 주시면 감사하겠습니다.

답변

4

ans-1로 밖으로 시작하지만 값이 변경 :

 if ans == -1: 
      ans = n    # Right here 
     else: 
      ans = min(ans, n) # And right here 

ans 경우 숙박 -1에서, 다음 -1보다 큰 목록에는 번호가 없다. 이 일을

약간 더 읽기 방법은 다음과 같습니다

def min_value(L): 
    filtered = [n for n in L if n > -1] 

    if not filtered: 
     return -1 
    else: 
     return min(filtered) 
+0

@DSM : 그래. 나는 그것을 삭제했다. – Blender

+0

감사합니다. –

0

if ans == -1: ans = n 라인을 생략하고, 대신에 언제나 ans = min(ans, n)을 실행하면, 다음 ans에 남아있을 -1 대신 최소로 변경하는 -1보다 큰 값. min_value([-2, 3, -4, 2])
2 준다
min_value([-2, 3, -4, -5]) 3주고,
min_value([-2, -3, -4, -5]) 준다 -1 :

def min_value(L) 
    ans = -1 
    for n in L: 
     if n > -1: 
      ans = min(n, max(ans,n)) 
    return ans 

예 : 여기

일부 약간 짧은 대체 코드이다.

+0

이것은 훨씬 나은 기능이며 많은 관심과 성원을 부탁드립니다. –

0

나는이 명확하다고 생각 :

def min_value(L): 
    try: 
     return min(n for n in L if n > -1) 
    except ValueError: 
     # this gets raised if all n in L are not > -1 
     return -1 
0
def min_value(L): 
    return min([i for i in L if i >= -1] or [-1])