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 

任何帮助将不胜感激。

4

4 回答 4

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)
于 2012-12-09T05:46:59.407 回答
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。

于 2012-12-09T06:07:46.560 回答
0
def min_value(L):
    return min([i for i in L if i >= -1] or [-1])
于 2012-12-09T11:54:36.390 回答
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
于 2012-12-09T06:21:53.160 回答