2017-06-24 87 views
1

有什麼辦法可以訪問嵌套列表項嗎?如何訪問python中的嵌套列表項而不創建新列表?

# Here a is the nested list 
a = [1, 2, [3,4]] 
a[0] == 1 
a[1] == 2 
a[2] == [3,4] 
# k is the new list 
k = a[2] 
k[0] == 3 
k[1] == 4 
+0

什麼*確切*你想要做什麼?你只是想訪問列表中的[3,4]部分?它位於列表的「2」位置,所以'a [2]'會讓你成爲列表的一部分。如果你需要從那裏訪問列表中的元素,那麼:'a [2] [0]'會讓你第一個,'a [2] [1]'會讓你第二個。 – idjaw

回答

2

你說而無需創建一個新的列表

我想解釋一下有關你一下。通過聲明b=a[2],你絕對不會創建一個新列表。在你的口譯員看看這個。

>>> a = [1,2,[3,4]] 
>>> b = a[2] 
>>> hex(id(a[2])) 
'0x7f1432fcd9c8' 
>>> hex(id(b)) 
'0x7f1432fcd9c8' 

十六進制(ID(your_variable))僅返回變量的地址。

'0x7f1432fcd9c8'a[2]b的地址。你有沒有注意到它們兩個都是一樣的?

>>> b=a[:] 
>>> hex(id(a)) 
'0x7f1431850608' 
>>> hex(id(b)) 
'0x7f1432fb9808' 

b=a[:]這隻創建一個新的副本。注意地址是如何不同的。 但請看下面這個。

>>> a 
[1, 2, [3, 4]] 
>>> b=a 
>>> hex(id(a)) 
'0x7f1431850608' 
>>> hex(id(b)) 
'0x7f1431850608' 

相同的地址。這是什麼意思 ?這意味着在Python中只有引用(即將值的內存地址分配給變量,所以請記住不要忘記這一點。另外

要訪問嵌套循環中的元素,請使用下標。

>>> a = [1,2,[3,4],[[9,9],[8,8]]] 
>>> a[1] 
2 
>>> a[2] 
[3, 4] 
>>> a[2][0] 
3 
>>> a[3][1] 
[8, 8] 
>>> a[3][1][0] 
8 

訪問這種方式在O(1)時間這樣做它是最快的方法不可能性的元件。

1

您可以通過提供兩個標,這樣的訪問:

a = [1, 2, [3,4]] 
a[2][0] == 3 
a[2][1] == 4 
0

列表在Python從0索引,而不是1

改爲這樣做。

# Here a is the nested list 
a = [1, 2, [3,4]] 
a[0] == 1 
a[1] == 2 
a[2] == [3,4] 
# k is the new list 
k = a[2] 
k[0] == 3 
k[1] == 4 

您也可以使用以下語法訪問嵌套表:

a[2][0] # => 3 
a[2][1] # => 2 
0

當你關注似乎是,你是一個新的列表:別擔心,你不是。

k = a[2] 

兩個ka[2]指向同一個列表。沒有新創建。

您可以輕鬆驗證通過改變k[0]到的東西比元素不同3它已經在那個位置:

k[0] = 5 

然後

print(a) 

這給

[1, 2, [5, 4]] 

如果你想創建一個新的列表,你將不得不e xplicitly這樣做:

k = a[2][:]