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

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

函數(shù)在Python中更改列表值而不是變量值

函數(shù)在Python中更改列表值而不是變量值

慕標(biāo)琳琳 2019-09-26 14:48:52
函數(shù)在Python中更改列表值而不是變量值讓我們看一個(gè)簡單的代碼:y = [1,2,3]def plusOne(y):     for x in range(len(y)):         y[x] += 1     return yprint plusOne(y), y a = 2def plusOne2(a):     a += 1     return aprint plusOne2(a), a“ y”的值會(huì)更改,但“ a”的值保持不變。我已經(jīng)知道這是因?yàn)橐粋€(gè)是可變的,而另一個(gè)則不是。但是,如何更改代碼以使函數(shù)不更改列表呢?例如,要做類似的事情(為簡單起見,使用偽代碼):a = [1,2,3,...,n]function doSomething(x):     do stuff with x    return x b = doSomething(a)if someOperation(a) > someOperation(b):     do stuff編輯:對(duì)不起,但是我對(duì)嵌套列表還有另一個(gè)問題。參見以下代碼:def change(y):     yN = y[:]     for i in range(len(yN)):         if yN[i][0] == 1:             yN[i][0] = 0         else:             yN[i][0] = 1     return yN data1 = [[1],[1],[0],[0]]data2 = change(data1)在這里不起作用。為什么?再次:如何避免這個(gè)問題?我知道為什么它不起作用:yN = y [:]將y的值復(fù)制到y(tǒng)N,但是這些值也是列表,因此對(duì)于列表中的每個(gè)列表,操作都必須加倍。如何使用嵌套列表執(zhí)行此操作?
查看完整描述

3 回答

?
米脂

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超3個(gè)贊

Python變量包含指向?qū)ο蟮闹羔樆蛞?。所有值(甚至整?shù))都是對(duì)象,賦值會(huì)將變量更改為指向其他對(duì)象。它不會(huì)變量中存儲(chǔ)新值,而是會(huì)更改變量以引用或指向其他對(duì)象。由于這個(gè)原因,許多人說Python沒有“變量”,而是有“名稱”,并且該=操作不是“將值分配給變量”,而是“將名稱綁定到對(duì)象”。

plusOne您修改(或“變異”)內(nèi)容時(shí),請y不要更改其y本身的含義。它始終指向同一列表,即您傳遞給函數(shù)的列表。全局變量y和局部變量y引用相同的列表,因此使用這兩個(gè)變量都可以看到更改。由于您更改了傳入的對(duì)象的內(nèi)容,因此實(shí)際上沒有理由返回y(實(shí)際上,返回None是Python本身對(duì)諸如此類的操作進(jìn)行的操作,這些操作可以“就地”修改列表-值由操作返回)創(chuàng)建新對(duì)象,而不是對(duì)現(xiàn)有對(duì)象進(jìn)行變異)。

plusOne2你正在改變局部變量a來引用不同的整數(shù)對(duì)象3。(“將名稱綁定a到對(duì)象3?!保┤肿兞?code>a不會(huì)因此改變,而是繼續(xù)指向2。

如果您不想更改傳入的列表,請對(duì)其進(jìn)行復(fù)制并進(jìn)行更改。然后,您的函數(shù)應(yīng)返回新列表,因?yàn)樗莿?chuàng)建新對(duì)象的那些操作之一,如果不返回該新對(duì)象,該新對(duì)象將丟失。您可以將其作為函數(shù)的第一行:x = x[:]例如(如其他人指出的那樣)?;蛘撸绻匀魏我环N方式調(diào)用該函數(shù)可能有用,則可以在調(diào)用者x[:]希望復(fù)制的情況下傳遞給調(diào)用者。


查看完整回答
反對(duì) 回復(fù) 2019-09-26
?
智慧大石

TA貢獻(xiàn)1946條經(jīng)驗(yàn) 獲得超3個(gè)贊

創(chuàng)建列表的副本。使用testList = inputList[:]??创a

>>> def plusOne(y):
        newY = y[:]
        for x in range(len(newY)):
            newY[x] += 1
        return newY>>> y = [1, 2, 3]>>> print plusOne(y), y[2, 3, 4] [1, 2, 3]

或者,您可以在函數(shù)中創(chuàng)建一個(gè)新列表

>>> def plusOne(y):
        newList = []
        for elem in y:
            newList.append(elem+1)
        return newList

您還可以像其他人指出的那樣使用理解力。

>>> def plusOne(y):
        return [elem+1 for elem in y]


查看完整回答
反對(duì) 回復(fù) 2019-09-26
  • 3 回答
  • 0 關(guān)注
  • 845 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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