虚假迭代

Mic*_*ney 0 python iteration for-loop list

我想写一个for测试两个函数的循环list.第一个给出一个int,第二个a 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]
Run Code Online (Sandbox Code Playgroud)

我的问题是,使用上面写的函数,我L = [-10, 5, 6]回来了,因为如果i被删除,由于删除的元素i+1变成了一个i+2.有人知道如何解决这个问题吗?十分感谢!

Ank*_*cha 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
Run Code Online (Sandbox Code Playgroud)