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

'''L是> = -1的整數列表。返回大於-1的L中的最小值。如果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。

下面是一些稍短交替代碼:

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

例如:
min_value([-2, 3, -4, -5])給出3,
min_value([-2, 3, -4, 2])給出2,和
min_value([-2, -3, -4, -5])給出-1。

+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]) 
相關問題