Python 2.7 Python MIT 6.00.1X
我有一个代码,我想它已经完成了,我只是遇到了一个问题,当我的循环运行时,我从列表中删除了一些东西,它跳过了列表中的下一个变量,我不知道如何使它不跳过它。我猜是因为下一个变量是0,循环认为它已经是0了。有没有办法解决这个问题。代码如下Python 2.7 Python MIT 6.00.1X,python-2.7,python-3.x,Python 2.7,Python 3.x,我有一个代码,我想它已经完成了,我只是遇到了一个问题,当我的循环运行时,我从列表中删除了一些东西,它跳过了列表中的下一个变量,我不知道如何使它不跳过它。我猜是因为下一个变量是0,循环认为它已经是0了。有没有办法解决这个问题。代码如下 def f(i): return i + 2 def g(i): return i > 5 def applyF_filterG(L, f, g): """ Assumes L is a list of integers
def f(i):
return i + 2
def g(i):
return i > 5
def applyF_filterG(L, f, g):
"""
Assumes L is a list of integers
Assume functions f and g are defined for you.
f takes in an integer, applies a function, returns another integer
g takes in an integer, applies a Boolean function,
returns either True or False
Mutates L such that, for each element i originally in L, L contains
i if g(f(i)) returns True, and no other elements
Returns the largest element in the mutated L or -1 if the list is empty
"""
for i in L:
if g(f(i)) == False:
L.remove(i)
return max(L)
L = [0, -10, 5, 6, -4]
print(applyF_filterG(L, f, g))
print(L)
尝试将L的所有值复制到L_temp,这样在进行迭代时不会弄乱L,并避免在修改列表时跳过这些值。应该是这样的
def applyF_filterG(L, f, g):
L_temp = L[:]
for i in L_temp:
if g(f(i)) == False:
L.remove(i)
if len(L) == 0:
return -1
else:
return max(L)
更简洁地说:
max(x for x in L if f(g(x)))
要更改列表,请执行以下操作:
L[:] = [x for x in L if f(g(x))]
return max(L)
此代码有效非常肯定你在这里发布是违反了荣誉代码,麻省理工学院提供了许多论坛来获取帮助,我建议你使用这些论坛来代替在这里发布。
def applyF_filterG(L, f, g):
l = []
if len(L) > 0:
for i in L:
if (g(f(i)) == True):
l.append(i)
L[:] = l
if len(L) > 0:
return max(L)
else:
return -1
else:
L[:] = l
return -1