第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

為什么在主文件中看到功能修改后的列表不更改?

為什么在主文件中看到功能修改后的列表不更改?

牛魔王的故事 2021-03-20 15:11:08
我需要隨機(jī)擦除一些數(shù)字列表中的某個(gè)精確元素,提取一些隨機(jī)索引并將其保存在稱為aleaindex的集合中(完成,由于某些SO用戶的幫助,它可以正常工作)?,F(xiàn)在,我想用新的,最終較短的新列表newa,newb等替換舊列表a,b等。這是函數(shù):def myfunction(N, other_parameters, a, b, c):    ...    while (...):        aleaindex.add(random.randint(..., ...))    ...    new_a = [v for i, v in enumerate(a) if i not in aleaindex]    while a: a.pop()        a = new_a[:]    ...對于其他列表b,c等,依此類推。問題:該函數(shù)似乎在模塊內(nèi)正確地對其進(jìn)行了修改(通過打印檢查),但是,當(dāng)我在模塊外部(即“主”文件中)打印修改后的列表時(shí),列表是未修改的。我哪里錯(cuò)了?
查看完整描述

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]

變量不按值傳遞-您可以編輯可變值。


查看完整回答
反對 回復(fù) 2021-03-29
?
冉冉說

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è)列表:

http://img1.sycdn.imooc.com//6061912d00010e7d05510109.jpg

當(dāng)您調(diào)用函數(shù)時(shí)myfunction(),該函數(shù)除其他外將創(chuàng)建一個(gè)名為的變量,該變量a將指向由list1以下內(nèi)容指向的同一列表:

http://img1.sycdn.imooc.com//6061913b0001d0d605550198.jpg

到目前為止,一切都很好。然后我們進(jìn)入下面的循環(huán):


while a:

    a.pop()

    a = new_a[:]

在它的第一行(a.pop()),您從列表中得到了一個(gè)項(xiàng)目。由于變量a和list1指向同一列表,因此您將看到相同的結(jié)果...

http://img1.sycdn.imooc.com//6061914b000178b505530197.jpg

...如果不是循環(huán)(a = new_a[:])的下一行。在這一行中,您正在使a變量指向另一個(gè) 列表:

http://img1.sycdn.imooc.com//606191580001cfd605540201.jpg

現(xiàn)在,您執(zhí)行的每個(gè)操作a都將在此列表中,而該列表與無關(guān)list1。例如,您可以a.pop()在下一次迭代中執(zhí)行以獲取它:


http://img1.sycdn.imooc.com//606191640001729205540200.jpg

然而,它使完全沒有意義,因?yàn)樵摼€a = new_a[:]將取代列表指出,a 再次另一種不同的列表

http://img1.sycdn.imooc.com//6061916f0001fa8405520314.jpg

那么,解決方案是什么?我不知道。如我所說,從您的代碼中(至少對我而言)是不可能的。您需要更多地了解您要嘗試做的事情,并在更多背景下向我們解釋。


查看完整回答
反對 回復(fù) 2021-03-29
?
不負(fù)相思意

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)行更改。


查看完整回答
反對 回復(fù) 2021-03-29
  • 3 回答
  • 0 關(guān)注
  • 170 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號