列表初始化

列表是以方括号“[]''包围的数据集合,不同成员间以“,”分隔。列表中可以包含任何数据类型,也可以包括另一个列表。列表也可以通过序号来访问其中的成员。在脚本中可以对列表进行排序、添加、删除等操作,改变列表中的某一成员的值,这也是不同于字符串的两点。

列表的初始化正确方式为在初始化的时候可以指定长度(使用None):

>>> ll=[None]*4

>>> ll

[None, None, None, None]

或使用range函数

>>> ll=[i for i in range(4)]

>>> ll

[0, 1, 2, 3]

>>> 

       初始化为固定值

>>> initval=1

>>>

>>> [ initval for i in range(5)]

[1, 1, 1, 1, 1]

>>> 

下面的初始化是错误的

>>> ll=[]

>>> ll[0]=1

Traceback (most recent call last):

  File "",line 1, in

IndexError: list assignment index out of range

>>> 

       ll=[]说明ll是个空列表,在内存中未分配元素存储空间,所以指定下标赋值的时候报错。

这和C语言一样,初始化的时候需要声明长度。

       同理,初始化一个二维数组的正确方式为

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

[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0,0, 0, 0, 0], [0, 0, 0, 0, 0]]

>>> 

       下列做法是错误的

>>> array2=[[0]*5]*6

>>> array

[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0,0, 0, 0, 0], [0, 0, 0, 0, 0]]

>>> 

       因为[0] * 5是一个一维数组的对象,* 6的话只是把对象的引用复制了6次。

如果修改array1[0][0]、array2[0][0],有如下结果

>>> array2[0][0]=1

>>> array2

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

>>> 

>>> array1[0][0]=1

>>> array1

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

>>> 

       可见,只有第一种方式才是正确的。

你可能感兴趣的:(列表初始化)