2014-07-23 46 views
2

我看到一些相關的問題,我想我的問題仍然沒有答案。我怎樣才能得到一個指向列表成員的指針(引用)?我說,我有:是否有可能獲得列表成員的指針?

>>> a = [None] 
>>> d = a[0] 
>>> d = 3 

我期望能獲得:

>>> a 
[3] # But I get [None] of course. 

是否有可能在Python呢?或者我該如何實現?

UPDATE

我的最終目標是改變

回答

2

不,這是不可能的。您不能存儲對列表中位置的引用,並嘗試稍後通過分配對其進行更新。

如果您想實現解決方法,那麼您可能希望使用閉包來捕獲對列表中所需索引的引用。這裏有一個例子:

# Here's my list 
mylist = [1, 2, 3, 4] 

# Save a reference to the list using a function to close over it 
def myref(x): mylist[1] = x 

# Update the referenced value to 7 
myref(7) 

# mylist is now [1, 7, 3, 4] 
print mylist 

您使用的是myref(7)語法,而不是myref = 7語法,因爲沒有辦法超載在Python賦值操作符卡住了,但我認爲這會爲你工作。

在您對其他答案之一的評論中,您提到您實際上是在處理n維列表,並且您希望保存一個參考,以便稍後在索引不在範圍內時更新它。這也適用於這種情況。這裏有一個例子:

# My 3D list 
list3D = [[[1, 2], [3, 4]], [[5, 6], [7, 8]]] 

# Find 
def findEntry(data, x): 
    for i, page in enumerate(data): 
     for j, row in enumerate(page): 
      for k, col in enumerate(row): 
       if col == x: 
        def myref(y): data[i][j][k] = y 
        return myref 

# Get a reference to the first cell containing 4 
updater = findEntry(list3D, 4) 

# Update that cell to be 44 instead 
updater(44) 

# list3D is now [[[1, 2], [3, 44]], [[5, 6], [7, 8]]] 
print list3D 
+0

這是我想聽到的。是的,這就是我現在所擁有的(帶lambda)。用指針我的代碼會更緊湊... – Necronomicron

+0

@Necronomicron - 你做了lambdas?當我將使用lambda表達式的示例放在一起時,我意識到您不能在lambda表達式中進行賦值,因此我轉而使用「def」。 – DaoWen

+0

對不起,lambda **和**函數。當然,我們不能在lambda中做任務。 :) – Necronomicron

1

使用ref單元比使用指針更好。指針是從Python的角度來看的一個遙遠的概念。您可以從列表中製作廉價的參考單元。

pointer = [3] 
pointer[0] = 5 #change value of ref cell 
pointer[0] #get value of ref cell 
+0

所以這些列表(如在原來的問題)真的會列出清單,例如'a = [[None]]'。 – Wyzard

+0

這是一個簡單的索引調用。我有N維數組,我需要指向某個成員的指針,因爲索引不可用'現在'。這很難解釋,現在確實沒有關係。 – Necronomicron

+0

問題已更新。 – Necronomicron

0

敷在

>>> class A(object): 
...  pass 
... 
>>> a = [A()] 
>>> a[0] 
<__main__.A object at 0x1004ad850> 
>>> a[0].x = 5 
>>> a 
[<__main__.A object at 0x1004ad850>] 
>>> b = a[0] 
>>> b.x 
5 
>>> b.x = 6 
>>> a[0].x 
6 
+0

是的,但數組是'a = [None]'。無論如何,在我的情況下包裝會使情況變得更糟。 – Necronomicron

+0

仍然有效,將「無」包裝在類中。 – marcadian

相關問題