我正在尝试创建任意大小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的新手,有人可以给我一些想法吗?
答案 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'它反映在所有