方法
說明將元素x新增至列表lst尾部
lst.extend(l)
將列表l中所有元素新增至列表lst尾部
lst.insert(index, x)
在列表lst指定位置index處新增元素x,該位置後面的所有元素後移乙個位置
lst.remove(x)
在列表lst中刪除首次出現的指定元素,該元素之後的所有元素前移乙個位置
lst.pop([index])
刪除並返回列表lst中下標為index(預設為-1)的元素
lst.clear()
刪除列表lst中所有元素,但保留列表物件
lst.index(x)
返回列表lst中第乙個值為x的元素的下標,若不存在值為x的元素則丟擲異常
lst.count(x)
返回指定元素x在列表lst中的出現次數
lst.reverse()
對列表lst所有元素進行逆序
lst.sort(key=none, reverse=false)
對列表lst中的元素進行排序,key用來指定排序依據,reverse決定公升序(false),還是降序(true)
lst.copy()
返回列表lst的淺複製
可以使用「+」運算子將元素新增到列表中。
>>> alist = [3,4,5]
>>> alist = alist + [7]
>>> alist
[3, 4, 5, 7]
嚴格意義上來講,這並不是真的為列表新增元素,而是建立了乙個新列表,並將原列表中的元素和新元素依次複製到新列表的記憶體空間。由於涉及大量元素的複製,該操作速度較慢,在涉及大量元素新增時不建議使用該方法。
所謂「原地」,是指不改變列表在記憶體中的首位址。
python採用的是基於值的自動記憶體管理方式,當為物件修改值時,並不是真的直接修改變數的值,而是使變數指向新的值,這對於python所有型別的變數都是一樣的。
>>> a = [1,2,3]
>>> id(a) #返回物件的記憶體位址
20230752
>>> a = [1,2]
>>> id(a)
20338208
列表中包含的是元素值的引用,而不是直接包含元素值。
如果是直接修改序列變數的值,則與python普通變數的情況是一樣的
如果是通過下標來修改序列中元素的值或通過可變序列物件自身提供的方法來增加和刪除元素時,序列物件在記憶體中的起始位址是不變的,僅僅是被改變值的元素位址發生變化,也就是所謂的「原地操作」。
>>> a = [1,2,4]
>>> b = [1,2,3]
>>> a == b
false
>>> id(a) == id(b)
false
>>> id(a[0]) == id(b[0])
true
>>> a = [1,2,3]
>>> id(a)
25289752
>>> a.remove(3)
>>> a
[1, 2, 4]
>>> id(a)
25289752
>>> a[0] = 5
>>> a
[5, 2, 4]
>>> id(a)
25289752
使用列表物件的extend()方法可以將另乙個迭代物件的所有元素新增至該列表物件尾部。通過extend()方法來增加列表元素也不改變其記憶體首位址,屬於原地操作。
>>> a.extend([7,8,9])
>>> a
[5, 2, 4, 7, 8, 9]
>>> id(a)
25289752
>>> alist.extend([11,13])
>>> alist
[3, 4, 5, 7, 9, 11, 13]
>>> alist.extend((15,17))
>>> alist
[3, 4, 5, 7, 9, 11, 13, 15, 17]
使用列表物件的insert()方法將元素新增至列表的指定位置。
>>> alist.insert(3, 6) #在下標為3的位置插入元素6
>>> alist
[3, 4, 5, 6, 7, 9, 11, 13, 15, 17]
應盡量從列表尾部進行元素的增加與刪除操作。
列表的insert()可以在列表的任意位置插入元素,但由於列表的自動記憶體管理功能,insert()方法會引起插入位置之後所有元素的移動,這會影響處理速度。
類似的還有後面介紹的remove()方法以及使用pop()函式彈出列表非尾部元素和使用del命令刪除列表非尾部元素的情況。
import time
def insert():
a =
for i in range(10000):
a.insert(0, i)
start = time.time()
for i in range(10):
insert()
print('insert:', time.time()-start)
使用乘法來擴充套件列表物件,將列表與整數相乘,生成乙個新列表,新列表是原列表中元素的重複。
>>> alist = [3,5,7]
>>> blist = alist
>>> id(alist)
57091464
>>> id(blist)
57091464
>>> alist = alist*3
>>> alist
[3, 5, 7, 3, 5, 7, 3, 5, 7]
>>> blist
[3,5,7]
>>> id(alist)
57092680
>>> id(blist)
57091464
當使用*運算子將包含列表的列表重複並建立新列表時,並不是複製子列表值,而是複製已有元素的引用。因此,當修改其中乙個值時,相應的引用也會被修改。
>>> x = [[none] * 2] * 3
>>> x
[[none, none], [none, none], [none, none]]
>>> x[0][0] = 5
>>> x
[[5, none], [5, none], [5, none]]
>>> x = [[1,2,3]] * 3
>>> x[0][0] = 10
>>> x
[[10, 2, 3], [10, 2, 3], [10, 2, 3]]
使用del命令刪除列表中的指定位置上的元素。
>>> a_list = [3,5,7,9,11]
>>> del a_list[1]
>>> a_list
[3, 7, 9, 11]
使用列表的pop()方法刪除並返回指定位置(預設為最後乙個)上的元素,如果給定的索引超出了列表的範圍則丟擲異常。
>>> a_list = list((3,5,7,9,11))
>>> a_list.pop()
11>>> a_list
[3, 5, 7, 9]
>>> a_list.pop(1)
5>>> a_list
[3, 7, 9]
使用列表物件的remove()方法刪除首次出現的指定元素,如果列表中不存在要刪除的元素,則丟擲異常。
>>> a_list = [3,5,7,9,7,11]
>>> a_list.remove(7)
>>> a_list
[3, 5, 9, 7, 11]
**編寫好後必須要經過反覆測試,不能滿足於幾次測試結果正確。例如,下面的**成功地刪除了列表中的重複元素,執行結果是完全正確的。
>>> x = [1,2,1,2,1,2,1,2,1]
>>> for i in x:
if i == 1:
x.remove(i)
>>> x
[2, 2, 2, 2]
然而,上面這段**的邏輯是錯誤的。同樣的**,僅僅是所處理的資料發生了一點變化,然而當迴圈結束後卻發現並沒有把所有的「1」都刪除,只是刪除了一部分。
>>> x = [1,2,1,2,1,1,1]
>>> for i in x:
if i == 1:
x.remove(i)
>>> x
[2, 2, 1]
兩組資料的本質區別在於,第一組資料中沒有連續的「1」,而第二組資料中存在連續的「1」。出現這個問題的原因是列表的自動記憶體管理功能。
在刪除列表元素時,python會自動對列表記憶體進行收縮並移動列表元素以保證所有元素之間沒有空隙,增加列表元素時也會自動擴充套件記憶體並對元素進行移動以保證元素之間沒有空隙。每當插入或刪除乙個元素之後,該元素位置後面所有元素的索引就都改變了。
正確的**:
>>> x = [1,2,1,2,1,1,1]
>>> for i in x[::]: #切片
if i == 1:
x.remove(i)
或者:>>> x = [1,2,1,2,1,1,1]
>>> for i in range(len(x)-1,-1,-1): #從後往前刪
if x[i]==1:
del x[i]
Python 列表使用
1.表的求長 2.下標表示式 3.表的構造 4.處理表的基本方法 5.表的巢狀 6.程式設計例項 7.表的操作 8.深淺拷貝 lst 1,2,3,4,5 len lst 5 lst 1,2,3,4,5 lst 0 1 lst 1 5 lst math phys econ lst 1 eng lst ...
python列表的使用 Python 列表常見用法
列表索引 mlist 1,2,3,3,e 4,5 a a abc 5,6,7 print mlist print mlist 3 7 print mlist 3 1 print len mlist mlist 2 hi,python print mlist print mlist 3 6 print...
err number 詳細列表
資訊 3沒有返回的 gosub 5無效的過程 呼叫或者引數無效 6 溢位 7記憶體不足 9 陣列索引超出範圍 10此數 組為固定的或 暫時鎖定 11 除以零 13類 型不符合 14 字串空間不足 16表示式太複雜 17不能完成所要求的操作 18 發生使用者中斷 20沒有恢復的錯誤 28堆疊 空間不足...