2016-10-04 13 views
0

listの2つの機能をテストするループをforに書きたいと思います。最初はintを戻し、もう1つはbooleanです。 boolean == False関数がリストから要素を削除する必要がある場合は、関数Lを呼び出した後に最後に変更する必要があります。ここに例があります。偽の繰り返し

def f(i): 
    return i + 2 

def g(i): 
    return i > 5 

L = [0, -10, 5, 6, -4] 

def applyF_filterG(L, f, g): 
    for i in L: 
     if g(f(i)) == False:   
      L.remove(i) 

L = [5, 6] 

私の問題はiが削除された場合、i+1が原因で削除要素のi+2に変わるため、上記の記述された機能で、私は戻ってL = [-10, 5, 6]を得るということです。誰かがこれを解決する方法を知っていますか?本当にありがとう!

+0

これは 'for i in L [:]'の代わりに 'for i in L'をコピーしても繰り返します。 –

+0

''もしiがi + 2> 5ならiのiのi ''と同じ結果が得られます。 –

答えて

5

反復処理中は、リストから要素を削除しないでください。 新しいリストL1をLと同じにして、Lから要素を削除し、L1を反復処理するだけです。

def f(i): 
    return i + 2 

def g(i): 
    return i > 5 

L = [0, -10, 5, 6, -4] 

def applyF_filterG(L, f, g): 
    L1 = list(L) 
    for i in L1: 
     if g(f(i)) == False:   
      L.remove(i) 


applyF_filterG(L, f, g) 

print L 
2

あなただけの別のリストを生成することによって、これを簡素化することができます:そのような

L = [0, -10, 5, 6, -4] 
r = [a for a in L if a <= 5] 

か何か?

+0

関数は単なる例にすぎず、変更することができます。だから私はループの中でより具体的にすることができないのです。 –

+0

次に、関数r = [aをf(a)<= g()の場合にはaに対して呼び出します。ループするリストから項目を削除する代わりに、新しいリストを作成する必要があります。ループの後、L = rを代入することができます。 – Hannu