簡體   English   中英

如何將列表元素作為參考傳遞?

[英]How to pass a list element as reference?

我將列表的單個元素傳遞給函數。 我想修改那個元素,也就是列表本身。

def ModList(element):
    element = 'TWO'

l = list();
l.append('one')
l.append('two')
l.append('three')
print l
ModList(l[1])
print l

但是這種方法不會修改列表。 這就像元素是按值傳遞的。 輸出是:

['one','two','three']
['one','two','three']

我希望函數調用后列表的第二個元素是“TWO”:

['one','TWO','three']

這可能嗎?

已經在這里的解釋是正確的。 但是,由於我想以類似的方式濫用 python,因此我將提交此方法作為解決方法。

從列表中調用特定元素直接返回列表中該元素的值的副本。 即使復制列表的子列表也會返回對包含值副本的數組的新引用。 考慮這個例子:

>>> a = [1, 2, 3, 4]
>>> b = a[2]
>>> b
3
>>> c = a[2:3]
>>> c
[3]
>>> b=5
>>> c[0]=6
>>> a
[1, 2, 3, 4]

b僅復制值, c也不是從a復制的子列表,都不能更改a值。 盡管它們有共同的起源,但沒有任何聯系。

但是,numpy 數組使用“原始”內存分配並允許返回數據視圖。 視圖允許以不同的方式表示數據,同時保持與原始數據的關聯。 因此,一個工作示例是

>>> import numpy as np
>>> a = np.array([1, 2, 3, 4])
>>> a
array([1, 2, 3, 4])
>>> b = a[2]
>>> b
3
>>> b=5
>>> a
array([1, 2, 3, 4])
>>> c = a[2:3]
>>> c
array([3])
>>> c[0]=6
>>> a
array([1, 2, 6, 4])
>>> 

雖然僅通過值提取單個元件仍然份,保持元件的陣列視圖2為參考原始元件2a (雖然現在元素0c ),並進行變更c的值改變a作為好。

Numpy ndarray有許多不同的類型,包括通用對象類型。 這意味着您可以為幾乎任何類型的數據維護這種“按引用”行為,而不僅僅是數值。

Python 是一種按值傳遞的語言,因此您不能通過函數ModList賦值來更改值。 您可以做的是將列表和索引傳遞給ModList ,然后以這種方式修改元素

def ModList(theList, theIndex) :
  theList[theIndex] = 'TWO'

ModList(l, 1)

Python 不會通過引用傳遞 只需明確地做到這一點:

l[1] = ModList(l[1])

此外,由於這只會更改一個元素,因此我建議ModList是一個令人困惑的名稱。

在很多情況下,你也可以考慮讓函數既修改又返回修改后的列表。 這使得調用者代碼更具可讀性:

def ModList(theList, theIndex) :
          theList[theIndex] = 'TWO'
    return theList

l = ModList(l, 1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM