有什麼辦法可以訪問嵌套列表項嗎?如何訪問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
有什麼辦法可以訪問嵌套列表項嗎?如何訪問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
你說而無需創建一個新的列表
我想解釋一下有關你一下。通過聲明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)時間這樣做它是最快的方法不可能性的元件。
您可以通過提供兩個標,這樣的訪問:
a = [1, 2, [3,4]]
a[2][0] == 3
a[2][1] == 4
列表在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
當你關注似乎是,你是一個新的列表:別擔心,你不是。
後
k = a[2]
兩個k
和a[2]
指向同一個列表。沒有新創建。
您可以輕鬆驗證通過改變k[0]
到的東西比元素不同3
它已經在那個位置:
k[0] = 5
然後
print(a)
這給
[1, 2, [5, 4]]
如果你想創建一個新的列表,你將不得不e xplicitly這樣做:
k = a[2][:]
什麼*確切*你想要做什麼?你只是想訪問列表中的[3,4]部分?它位於列表的「2」位置,所以'a [2]'會讓你成爲列表的一部分。如果你需要從那裏訪問列表中的元素,那麼:'a [2] [0]'會讓你第一個,'a [2] [1]'會讓你第二個。 – idjaw