我想写一个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
。有人知道如何解决这个问题吗?非常感谢!
答案 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]
或类似的东西?