Python-有趣的二维数组

有趣的二维数组,对于初学python的人的确有一定的迷惑性(就是我。。)
看代码:

a=[]
b=[]
for i in range(5):
    a.append(b)
a[0]=1
a[1].append(2)
a[2].append(3)

print(a)

out:

[1, [2, 3], [2, 3], [2, 3], [2, 3]]

代码创建一个二位数组,但当我们为a[1]添加数字2时,发现所有的都被改变,即添加了一个2,接下来添加一个3,同样也被添加到了所有下标中.
通过官方文档(如何创建多维列表?):

https://docs.python.org/zh-cn/3/faq/programming.html#faq-multidimensional-list

也就是说 修改 b中的任何一个元素实际上都是对这一个空列表的修改,都是对b进行操作,在python中万物皆对象,可以根据内存地址更好的了解。

print(id(b))
print(id(a[1]))
print(id(a[2]))
print(id(a[3]))

out:
1884645897160
1884645897160
1884645897160
1884645897160

可以看出b和a[1],a[2],a[3]的内存地址一样,也就是说只是进行在b上的操作,保存在了b的内存地址。除了a[0]被赋值,其余的只是在相同的b上进行操作。b在一开始定义列表,分配其内存空间,并且列表是可变数据类型。换言之,这样只是列表a套列表b。

可以使用列表推导式创建二维数组:

list=[]
list = [[] for i in range(3)]
list[0].append(3)
list[1]=2
print(list)

out:
[[3], 2, []]

也可以使用numpy:

import numpy
num_list = numpy.zeros((2,2))
print(num_list)
num_list[0][0]=1
print(num_list)

out:
[[0. 0.]
 [0. 0.]]
[[1. 0.]
 [0. 0.]]
发布了71 篇原创文章 · 获赞 204 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_44198436/article/details/103021044
今日推荐