Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 Python MIT 6.00.1X_Python 2.7_Python 3.x - Fatal编程技术网

Python 2.7 Python MIT 6.00.1X

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

我有一个代码,我想它已经完成了,我只是遇到了一个问题,当我的循环运行时,我从列表中删除了一些东西,它跳过了列表中的下一个变量,我不知道如何使它不跳过它。我猜是因为下一个变量是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
    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