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次。如果采用方式一,则对list进行浅拷贝,每一个list调用append等方法时,所有list都会同步调用;而方式二这种python风格的数组comprehension表达式方式,则生成了n个相互独立的list对象,此时每行的list之间互不影响。显然,我们应该使用方式二来进行二维list的指定行数的初始化。

测试如下:

方式一

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

结果一

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

方式二

a = [list() for i in range(5)]
a[0].append(1)

结果二

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

 

  • 9
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值