Python 错误迭代

Python 错误迭代,python,list,for-loop,iteration,Python,List,For Loop,Iteration,我想为编写一个循环,用于测试列表上的两个函数。第一个返回int,第二个返回布尔值。如果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)) == F

我想为
编写一个
循环,用于测试
列表上的两个函数。第一个返回int,第二个返回布尔值。如果
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]

我的问题是,对于上面编写的函数,我得到了
L=[-10,5,6]
,因为如果
I
被删除,那么
I+1
会因为删除的元素而变成
I+2
。有人知道怎么解决这个问题吗?非常感谢

在对列表进行迭代时,决不应从列表中删除元素。 只需使新列表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

您可以通过生成另一个列表来简化此过程:

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

r=[a对于L中的a如果a
对于L中的i
而不是使用
对于L中的i[:]
,它将在它的副本中迭代。
[i对于L中的i如果i+2>5]
它也会给出与您期望的相同的结果。函数只是示例,它们可以更改。这就是为什么我不能在循环中更具体,然后调用函数r=[a代表L中的a,如果f(a)