差异

2017-07-03 33 views
0

我想创建arbitruary大小NXM的嵌套列表差异

假设N = 3,M = 3 当我创建这样

c = [0 for col in range(N)] 
c = [c for r in range(M)] 
print c 

和执行

列表
c[0][0]=1 

我得到

c = [[1, 0, 0], [1, 0, 0], [1, 0, 0]] 

但是,当我创建像这样的列表:

c = [[0, 0, 0], [0, 0, 0], [0, 0, 0]] 

和执行

c[0][0] = 1 

我得到

c = [[1, 0, 0], [0, 0, 0], [0, 0, 0]] 

我在新的蟒蛇,有人可以给我一些想法?

+0

您在列表中放置了相同的子列表'c'。 –

+0

是的,但为什么它在第一种情况下更新3个值c [0] [0],c [1] [0],c [2] [0] –

回答

0

在列表理解中,您正在创建对列表中每个元素的引用。这意味着只有一个索引被访问和更新时,每个元素都会发生变异。

c = [0 for col in range(3)] 
c = [c for r in range(3)] 

c[0][0] = "Test" 

输出:

[['Test', 0, 0], ['Test', 0, 0], ['Test', 0, 0]] 

编辑:

任意大小的嵌套列表:

import random 

new_list = [[0 for i in range(random.randint(1, 10))] for b in range(random.randint(1, 10))] 

输出:

[[0, 0, 0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0], [0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]] 
+0

谢谢Ajax,那很快,我该​​如何创建一个在运行期间嵌套的仲裁规模列表 –

+0

请参阅我最近的编辑。 – Ajax1234

+0

再次感谢,此作品 –

0

每个列表都是一个对象.... 在第一种情况下,您正在创建一个列表对象并将其引用参考变量'c'。 因此,只要你改变'c'中的特定元素,它就会反映在主列表中。

第一案

C =列表([0,0,0]) C =列表([C,C,C])

所以如果改变元件在一个'C'中它反映了所有