虚假迭代

时间:2016-10-04 11:34:01

标签: python list for-loop iteration

我想写一个for循环来测试list上的两个函数。第一个给出一个int,第二个给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]

我的问题是,通过上面写的函数,我得到L = [-10, 5, 6],因为如果移除了ii+1会因为删除的元素而变成i+2。有人知道如何解决这个问题吗?非常感谢!

2 个答案:

答案 0 :(得分:5)

迭代时,不应该从列表中删除元素。 只需创建一个新的列表L1等于L并从L中删除元素并迭代L1。

try catch

答案 1 :(得分:2)

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

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

或类似的东西?