【发布时间】:2016-10-04 11:34:01
【问题描述】:
我想编写一个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。有谁知道如何解决这个问题?非常感谢!
【问题讨论】:
-
for i in L而不是这个使用for i in L[:],虽然它是副本,但它会迭代。 -
[i for i in L if i+2 > 5]它也给出了您期望的相同结果。
标签: python list for-loop iteration