从python 3.5

时间:2016-10-27 13:52:27

标签: python python-3.5

如何获得以下结果?如果value大于L(任何整数),我想改变x(整数列表)以仅包含值。任何更改都只能在函数applyAdd(L, x)内完成。

def applyAdd(L, x):
        L =[i for i in L if i>x]
        return max(L)

在IPython控制台中输入以下输入时:

L = [0, -10, 5, 6, -4]
print(applyAdd(L, 3))
print(L)

我得到以下输出

6
[0, -10, 5, 6, -4]

相反,我想要

6
[5, 6]

我知道L在函数之外没有范围。 我的问题是,无论如何都要在L函数中修改applyAdd(L, x)

我将此作为任务,非常感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:0)

这不起作用,因为生成器会在函数内部新建一个列表。

def applyAdd(L, x):
        L =[i for i in L if i>x]
        print(id(L)) #some different value

L = [0, -10, 5, 6, -4]
print(id(L)) #some value

<强>解决方法1。请改用全局变量

L = [0, -10, 5, 6, -4]

def applyAdd(x):
    global L
    L =[i for i in L if i>x]
    return max(L)

print(applyAdd(3))
print(L)

<强>溶液2。继续使用生成器

def applyAdd(L, x):
    X = ([i for i in L if i>x])
    L.clear()
    L.extend(X)
    return max(L)

L = [0, -10, 5, 6, -4]
print(applyAdd(L, 3))
print(L)