列表是python中内置有序可变序列,列表的所有元素放在一堆中括号"{}"中,并使用逗号隔开
1.列表的创建
使用“=”直接创建一个列表
>>> x=[3,34]
>>> x
[3, 34]
>>> x=[3,2,5,[56],[7,9]]
>>> x
[3, 2, 5, [56], [7, 9]]
也可以使用list()函数将元组、range对象、字符串或其他类型的迭代对象类型的数据转换为列表。
>>> a_list=list((3,5,7,9))
>>> a_list
[3, 5, 7, 9]
>>> list (range(1,10,3))
[1, 4, 7]
>>> list('hello world')
['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']
2.可以使用“+”运算符将元素添加到列表中。
>>> a_list=[1,2,3]
>>> a_list=a_list + [4]
>>> a_list
[1, 2, 3, 4]
严格意义上这种方法是创建了一个新的列表,并将原列表中的元素和新元素依次复制到新列表的内存空间。
3.append()方法,原地修改列表,是真正意义上的在列表尾部添加元素,速度较快。
>>> a_list.append(9)
>>> a_list
[1, 2, 3, 4, 9]
这个方法不改变列表在内存中的首地址。
4.python采用的是基于值得自动内存管理方式,当为对象修改值时,并不是真的直接修改变量的值,而是使变量指向新的值,这对于python所有类型的变量都是一样的。
>>> a=[1,2,3]
>>> id(a) #返回对象的内存地址
2848185370368
>>> a=[1,2]
>>> id(a)
2848185620032
5.使用列表对象的extend()方法可以将另一个迭代对象的所有元素添加至该列表对象尾部。通过extend()方法来增加列表元素也不改变其内存首地址,属于原地操作。
>>> a=[1,2,3]
>>> id(a)
2848185370368
>>> a=[1,2]
>>> id(a)
2848185620032
>>> a.extend([1,2,3])
>>> a
[1, 2, 1, 2, 3]
>>> a_list.extend([21,31])
>>> a_list
[1, 2, 3, 4, 9, 21, 31]
>>> a_list.extend([12,13])
>>> a_list
[1, 2, 3, 4, 9, 21, 31, 12, 13]
>>> id(a)
2848185620032
6.使用列表对象的insert()方法将元素添加至列表的指定位置。
>>> a_list.insert(9,11)
>>> a_list
[1, 2, 3, 4, 9, 21, 31, 12, 9, 11, 13]
7.应尽量从列表尾部进行元素的增加与删除操作。
列表的insert()可以在列表的任意位置插入元素,但由于列表的自动内存管理功能,insert()方法会涉及到插入位置之后所有元素的移动,这会影响处理速度。
类似的还有后面介绍的remove()方法以及使用pop()函数弹出列表非尾部元素和使用del命令删除列表尾部元素的情况。
8.使用乘法来扩展列表对象,将列表与整数相乘,生成一个新列表,新列表是元列表中元素的重复。
>>> alist=[1,3,5]
>>> blist=alist
>>> id(alist)
2848177708416>>> id(blist)
2848177708416
>>> alist=alist*3
>>> alist
[1, 3, 5, 1, 3, 5, 1, 3, 5]
>>> blist
[1, 3, 5]
>>> id(alist)
2848185306368
>>> id(blist)
2848177708416
9.当使用*运算符将包含列表的列表重读并创建新列表是,并不创建元素的复制,而是创建已有对象的引用。因此,当修改其中一个值时,相应的引用也会被修改。
>>> x=[[None]*2]*3
>>> x
[[None, None], [None, None], [None, None]]>>> x=[[1,2,3]]*4
>>> x[0][0]=10
>>> x
[[10, 2, 3], [10, 2, 3], [10, 2, 3], [10, 2, 3]]
>>>
古之立大事者,不惟有超世之才,亦必有坚忍不拔之志。