2017-06-24 44 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][:]