Python 错误迭代
我想为Python 错误迭代,python,list,for-loop,iteration,Python,List,For Loop,Iteration,我想为编写一个循环,用于测试列表上的两个函数。第一个返回int,第二个返回布尔值。如果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)) == F
编写一个循环,用于测试列表上的两个函数。第一个返回int,第二个返回布尔值。如果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
。有人知道怎么解决这个问题吗?非常感谢 在对列表进行迭代时,决不应从列表中删除元素。
只需使新列表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]
L=[0,-10,5,6,-4]
r=[a对于L中的a如果a对于L中的i
而不是使用对于L中的i[:]
,它将在它的副本中迭代。[i对于L中的i如果i+2>5]
它也会给出与您期望的相同的结果。函数只是示例,它们可以更改。这就是为什么我不能在循环中更具体,然后调用函数r=[a代表L中的a,如果f(a)