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在全局范圍內分配給它,并對其進行更改。
添加回答
舉報