3 回答
TA贡献1801条经验 获得超16个赞
这行:
a=new_a[:]
a用新对象覆盖变量。在函数或模块之外,旧对象仍指向a(或在此处调用的对象)。尝试:
new_a = [v for i, v in enumerate(a) if i not in aleaindex]
while a:
a.pop()
a[:] = new_a[:]
解释
要查看此内容,请尝试以下操作。
>>> a = [1,2,3,4]
>>> b = a
>>> print b
[1, 2, 3, 4]
>>> a[:] = [2,3]
>>> print b
[2, 3]
>>> a = [5]
>>> print b
[2, 3]
功能示例!
如果变量是可变的(并且是普通列表),则可以使用:
>>> def f(a):
... a[0] = 2
>>> b = [3]
>>> f(b)
>>> print b
[2]
变量不按值传递-您可以编辑可变值。
TA贡献1877条经验 获得超1个赞
我不知道您要做什么,但是从您的摘录中您显然迷路了。您的代码没有多大意义,并且存在多个以上的问题。但是,您所问的问题-为什么列表没有完全更改?-似乎与此循环有关:
while a: a.pop()
a = new_a[:]
假设我们以这种方式调用您的函数:
list1 = [1, 2, 3, 4, 5, 6, 7]
myfunction(N, other_parameters, list1, [], [])
将会发生的是,当您调用第一行时,您将获得一个名为的变量list1,它将指向一个列表:
当您调用函数时myfunction()
,该函数除其他外将创建一个名为的变量,该变量a
将指向由list1
以下内容指向的同一列表:
到目前为止,一切都很好。然后我们进入下面的循环:
while a:
a.pop()
a = new_a[:]
在它的第一行(a.pop()),您从列表中得到了一个项目。由于变量a和list1指向同一列表,因此您将看到相同的结果...
...如果不是循环(a = new_a[:]
)的下一行。在这一行中,您正在使a
变量指向另一个 列表:
现在,您执行的每个操作a
都将在此列表中,而该列表与无关list1
。例如,您可以a.pop()
在下一次迭代中执行以获取它:
然而,它使完全没有意义,因为该线a = new_a[:]
将取代列表指出,a
再次为另一种不同的列表:
那么,解决方案是什么?我不知道。如我所说,从您的代码中(至少对我而言)是不可能的。您需要更多地了解您要尝试做的事情,并在更多背景下向我们解释。
TA贡献1777条经验 获得超10个赞
您发布的代码中没有任何功能。我怀疑问题是您没有返回新值。
您的代码可能会执行以下操作:
a = "foo"
def func():
a = "bar" # uh-oh this not the same as the global a
func()
此时,全局变量a是不变的,因为a局部func变量to是不相同的变量。
您想做:
a = "foo"
def func():
return "bar"
a = func()
该代码将a在全局范围内分配给它,并对其进行更改。
添加回答
举报