假迭代

2024-09-26 18:16:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我想写一个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],因为如果i被移除,那么i+1会因为移除的元素而变成i+2。有人知道怎么解决这个问题吗?非常感谢!你知道吗


Tags: 函数infalse元素列表forreturndef
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]

或者类似的?你知道吗

相关问题 更多 >

    热门问题