python 中列表创建的差异
difference in list creation in python
我正在尝试创建任意大小的嵌套列表 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 的新人,有人可以给我一些想法吗?
在列表理解中,您正在创建对列表中每个元素的引用。这意味着当只访问和更新一个索引时,每个元素都会发生变化。
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]]
每个列表都是一个对象....
在您的第一种情况下,您正在创建一个列表对象并使用引用变量 'c' 引用它。
因此,每当您更改 'c' 中的特定元素时,它都会反映在主列表中。
即
第一个案例
c = 列表([0,0,0])
c = 列表([c,c,c])
因此,如果您更改一个 'c' 中的元素,它会反映在所有
中
我正在尝试创建任意大小的嵌套列表 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 的新人,有人可以给我一些想法吗?
在列表理解中,您正在创建对列表中每个元素的引用。这意味着当只访问和更新一个索引时,每个元素都会发生变化。
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]]
每个列表都是一个对象.... 在您的第一种情况下,您正在创建一个列表对象并使用引用变量 'c' 引用它。 因此,每当您更改 'c' 中的特定元素时,它都会反映在主列表中。
即
第一个案例
c = 列表([0,0,0]) c = 列表([c,c,c])
因此,如果您更改一个 'c' 中的元素,它会反映在所有
中