[英]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
為參考原始元件2
的a
(雖然現在元素0
的c
),並進行變更c
的值改變a
作為好。
Numpy ndarray
有許多不同的類型,包括通用對象類型。 這意味着您可以為幾乎任何類型的數據維護這種“按引用”行為,而不僅僅是數值。
Python 是一種按值傳遞的語言,因此您不能通過函數ModList
賦值來更改值。 您可以做的是將列表和索引傳遞給ModList
,然后以這種方式修改元素
def ModList(theList, theIndex) :
theList[theIndex] = 'TWO'
ModList(l, 1)
在很多情況下,你也可以考慮讓函數既修改又返回修改后的列表。 這使得調用者代碼更具可讀性:
def ModList(theList, theIndex) :
theList[theIndex] = 'TWO'
return theList
l = ModList(l, 1)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.