列表是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]] >>>