python初始化指定长度的二维list

在python中,为了实现锯齿数组的数据结构,经常需要初始化一个行数指定、列数可以每行不同的list(np.array是定长的,无法实现锯齿数组变长的需求)。

我们首先来回顾一下一维list的初始化。python初始化指定长度的一维list有两种等价的方式

方式一

a = [None] * n

方法二

a = [None for i in range(n)]

结果都能得到 (n = 5)

[None, None, None, None, None]

事实上,在一维情形下,由于初始化list时被复制的元素是None,因此两种方式是等价的。

但是二维情形就不一样了,因为初始化指定长度的二维list时,我们需要把空序列list()复制n次。如果采用方式一,则对lists()进行浅拷贝,每一个list()调用append等方法时,所有list()都会同步调用;而方式二这种python风格的数组comprehension表达式方式,则可以实现list对象的深拷贝,此时每行的list()相互独立。显然,我们应该使用方式二来进行二维list的指定行数的初始化。

测试如下:

方式一

a = [list()] * 5
a[0].append(1)

结果一

[[1], [1], [1], [1], [1]]

方式二

扫描二维码关注公众号,回复: 4237677 查看本文章
a = [list() for i in range(5)]
a[0].append(1)

结果二

[[1], [], [], [], []]

猜你喜欢

转载自blog.csdn.net/da_kao_la/article/details/83929438