python中创建列表的区别

时间:2017-07-03 13:49:34

标签: python list initialization nested-lists creation

我正在尝试创建任意大小N X M的嵌套列表

假设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]]

我是python的新手,有人可以给我一些想法吗?

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]]

答案 1 :(得分:0)

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

即,

第一案例

c = list([0,0,0]) c = list([c,c,c])

所以,如果你在一个' c'它反映在所有