列表是以方括号“[]''包围的数据集合,不同成员间以“,”分隔。列表中可以包含任何数据类型,也可以包括另一个列表。列表也可以通过序号来访问其中的成员。在脚本中可以对列表进行排序、添加、删除等操作,改变列表中的某一成员的值,这也是不同于字符串的两点。
列表的初始化正确方式为在初始化的时候可以指定长度(使用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]]
>>>
可见,只有第一种方式才是正确的。