码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2019-01-08 22:26:04      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:固定   输出   写法   print   二维   复制   stl   python   init   

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维)

标签:固定   输出   写法   print   二维   复制   stl   python   init   

原文地址:https://www.cnblogs.com/andy-0212/p/10241745.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!