3 回答

TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超16個(gè)贊
這行:
a=new_a[:]
a用新對象覆蓋變量。在函數(shù)或模塊之外,舊對象仍指向a(或在此處調(diào)用的對象)。嘗試:
new_a = [v for i, v in enumerate(a) if i not in aleaindex]
while a:
a.pop()
a[:] = new_a[:]
解釋
要查看此內(nèi)容,請嘗試以下操作。
>>> 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貢獻(xiàn)1877條經(jīng)驗(yàn) 獲得超1個(gè)贊
我不知道您要做什么,但是從您的摘錄中您顯然迷路了。您的代碼沒有多大意義,并且存在多個(gè)以上的問題。但是,您所問的問題-為什么列表沒有完全更改?-似乎與此循環(huán)有關(guān):
while a: a.pop()
a = new_a[:]
假設(shè)我們以這種方式調(diào)用您的函數(shù):
list1 = [1, 2, 3, 4, 5, 6, 7]
myfunction(N, other_parameters, list1, [], [])
將會發(fā)生的是,當(dāng)您調(diào)用第一行時(shí),您將獲得一個(gè)名為的變量list1,它將指向一個(gè)列表:
當(dāng)您調(diào)用函數(shù)時(shí)myfunction()
,該函數(shù)除其他外將創(chuàng)建一個(gè)名為的變量,該變量a
將指向由list1
以下內(nèi)容指向的同一列表:
到目前為止,一切都很好。然后我們進(jìn)入下面的循環(huán):
while a:
a.pop()
a = new_a[:]
在它的第一行(a.pop()),您從列表中得到了一個(gè)項(xiàng)目。由于變量a和list1指向同一列表,因此您將看到相同的結(jié)果...
...如果不是循環(huán)(a = new_a[:]
)的下一行。在這一行中,您正在使a
變量指向另一個(gè) 列表:
現(xiàn)在,您執(zhí)行的每個(gè)操作a
都將在此列表中,而該列表與無關(guān)list1
。例如,您可以a.pop()
在下一次迭代中執(zhí)行以獲取它:
然而,它使完全沒有意義,因?yàn)樵摼€a = new_a[:]
將取代列表指出,a
再次為另一種不同的列表:
那么,解決方案是什么?我不知道。如我所說,從您的代碼中(至少對我而言)是不可能的。您需要更多地了解您要嘗試做的事情,并在更多背景下向我們解釋。

TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超10個(gè)贊
您發(fā)布的代碼中沒有任何功能。我懷疑問題是您沒有返回新值。
您的代碼可能會執(zhí)行以下操作:
a = "foo"
def func():
a = "bar" # uh-oh this not the same as the global a
func()
此時(shí),全局變量a是不變的,因?yàn)閍局部func變量to是不相同的變量。
您想做:
a = "foo"
def func():
return "bar"
a = func()
該代碼將a在全局范圍內(nèi)分配給它,并對其進(jìn)行更改。
添加回答
舉報(bào)