2016-10-02 6 views
-1

私はコードを持っていると思いますが、私はループが実行されているときに私はちょうど1つの問題を抱えていると思います。リストの中の次の変数をスキップして、それをスキップしないようにする方法。私は、次の変数が0であり、ループはすでに0を行ったと考えているので推測しています。これを修正する方法はありますか?リストを変異時に値を飛ばし避けるために、反復の上に行くとするときに、Lアップ混乱をしないようにPython MIT 6.00.1X

def f(i): 
    return i + 2 
def g(i): 
    return i > 5 


def applyF_filterG(L, f, g): 
    """ 
    Assumes L is a list of integers 
    Assume functions f and g are defined for you. 
    f takes in an integer, applies a function, returns another integer 
    g takes in an integer, applies a Boolean function, 
     returns either True or False 
    Mutates L such that, for each element i originally in L, L contains 
     i if g(f(i)) returns True, and no other elements 
    Returns the largest element in the mutated L or -1 if the list is empty 
    """ 
    for i in L: 
     if g(f(i)) == False: 
      L.remove(i) 
    return max(L) 


L = [0, -10, 5, 6, -4] 
print(applyF_filterG(L, f, g)) 
print(L) 
+2

あなたは名誉を壊しているかなり確信して動作しますここに投稿してコードを書いてください。b y MITに助けを求めるために、ここに投稿する代わりにそれらを使用することをお勧めします。 –

答えて

2

以下のコードは、L_tempにLのすべての値をコピーしてください。リストを変異させる

max(x for x in L if f(g(x))) 

:このより簡潔

def applyF_filterG(L, f, g): 

    L_temp = L[:]  
    for i in L_temp: 
     if g(f(i)) == False: 
      L.remove(i) 
    if len(L) == 0: 
     return -1 
    else: 
     return max(L) 
2

のようなものでなければなりません

L[:] = [x for x in L if f(g(x))] 
return max(L) 
0
def applyF_filterG(L, f, g): 
    l = [] 
    if len(L) > 0: 
     for i in L: 
      if (g(f(i)) == True): 
       l.append(i) 
     L[:] = l 
     if len(L) > 0: 
      return max(L) 
     else: 
      return -1 
    else: 
     L[:] = l 
     return -1 

このコードは

関連する問題