1. 程式人生 > >python初始化指定長度的二維list

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]]

方式二

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

結果二

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