1. 程式人生 > >python初始化list列表(1維、2維)

python初始化list列表(1維、2維)

修改 但是 init 二維數組 方法 for range row lis

1.初始化遞增的list:

list1 = list(range(10))
#print list1
#[0,1,2,...,9]

2.初始化每項為0的一維數組:

list2 = [0] * 5
#print list2
#[0,0,0,0,0]


3.初始化固定值的一維數組:

initVal = 1
listLen = 5
list3 = [ initVal for i in range(5)] # 推薦
#print list3
#[1,1,1,1,1]
list4 = [initVal] * listLen
#print list4
#[1,1,1,1,1]

4.初始化一個5x6每項為0(固定值)的數組(推薦使用):

multilist = [[0 for col in range(5)] for row in range(6)] # 推薦

5.初始化一個5x3每項為0(固定值)的數組

multilist = [[0] * 5 for row in range(3)]

看到了以上的方法,那初始化一個二維數組時,是否可以這樣做呢:
multi = [[0] * 5] * 3

其實,這樣做是不對的,因為[0] * 5是一個一維數組的對象,* 3的話只是把對象的引用復制了3次,比如,我修改multi[0][0]:
multi = [[0] * 5] * 3
multi[0][0] = ‘Hello‘
print multi

輸出的結果將是:
[[‘Hello‘, 0, 0, 0, 0], [‘Hello‘, 0, 0, 0, 0], [‘Hello‘, 0, 0,0, 0]]
我們修改了multi[0][0],卻把我們的multi[1][0],multi[2][0]也修改了。這不是我們想要的結果。

但是如下寫法是對的:
multilist = [[0] * 5 for row in range(3)]
multilist[0][0] = ‘Hello‘
print multilist
我們看輸出結果:
[[‘Hello‘, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
恩,沒問題。但是,由於使用 * 的方法比較容易引起混淆導致Bug,所以還是推薦使用上面方法4,即:

multilist = [[0 for col in range(5)] for row in range(6)]

python初始化list列表(1維、2維)