关于列表中的最小值

时间:2012-12-09 05:44:27

标签: python

 def min_value(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 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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。

答案 2 :(得分: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

答案 3 :(得分:0)

def min_value(L):
    return min([i for i in L if i >= -1] or [-1])