0
 def min_value(L)

'''L は >= -1 の int のリストです。>-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 

どんな助けでも大歓迎です。

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代わりに常に execute を実行する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 に答える