序列是Python中最基本的數據結構。是任意對象的有序集合,可以嵌套也不必數據類型一致;操作包括索引,切片,加,乘,檢查成員等。下面將詳細介紹:
1. 創建
可以嵌套;可以不必數據類型一致(數字,字符串,列表,元組,集合或者字典等)
list=[]
list1= ['Google', 'Runoob', 1997, 2000] # 結果爲:['Google', 'Runoob', 1997, 2000]
list2 = [1, (2, 3), 4, 5 ]
a = list([1, (2, 3), 4, 5 ]) # 結果爲:[1, (2, 3), 4, 5 ]
b = list("Google") # 結果爲:['G', 'o', 'o', 'g', 'l', 'e']
2. 添加元素
函數 | 參數 | 功能描述 |
---|---|---|
list.insert() | index和’obj’(obj可以是單個元素,也可以是列表、元組等) | 將obj作爲整體,在指定位置添加元素,如果指定的下標不存在,那麼就是在末尾添加 |
list.append() | 可以是單個元素,也可以是列表、元組等 | 在list 末尾增加一個元素 |
list1.extend() | 可以是單個元素,也可以是列表、元組等 | 不是將追加的列表或元組當成一個整體,而是追加列表或元組中的元素 |
“+” | 列表、元組等“+”列表、元組等 | 追加列表或元組中的元素 |
“*” | 列表、元組等“*”number | 重複列表中元素number遍(不是對列表中的元素值進行擴大或縮小) |
# 接上段代碼
list1.append(list2) # list2作爲一個元素,添加到list1末尾:['Google', 'Runoob', 1997, 2000, [1, (2, 3), 4, 5]]
list1.extend(list2) # list2中的每個元素,作爲list1中的元素逐個添加在末端:['Google', 'Runoob', 1997, 2000, 1, (2, 3), 4, 5]
list1+list2 # 追加列表或元組中的元素:['Google', 'Runoob', 1997, 2000, 1, (2, 3), 4, 5]
list1*3 # 列表中元素3遍:['Google', 'Runoob', 1997, 2000, 'Google', 'Runoob', 1997, 2000, 'Google', 'Runoob', 1997, 2000]
3. 取值
其中,index爲正數時,從左到右,從0開始記;如果index爲負數時,從右到左,從-1開始記
list[n] | 取index=n的元素 |
list[n:m] | 切片 |
list[:m] | 切片從頭開始取到index=m-1 |
list[n:] | 切片從index=n的元素取到最後 |
list[:] | 取全部 |
list[n: m: s] | s:步長;從index=n的開始到index=m-1,隔多少個元素取一次 |
注:切片同樣適用於字符串,字符串也有下標
4. 刪除
目的 | 函數 | 說明 |
---|---|---|
根據目標元素所在位置的索引值進行刪除 | del | del是一個“語句”,沒有“參數” |
根據元素的值進行刪除 | .remove() | 函數是刪除第一個和指定值相同的元素,如果找不到該元素,該方法將會引發 ValueError 錯誤。 |
將列表中所有元素全部刪除 | .clear() |
a_list = [20, 'crazyit', 30, -4, (3, 4), 'crazyit', 3.4]
# 根據“索引”刪除元素
del a_list[-1] # [20, 'crazyit', 30, -4, (3, 4), 'crazyit']
del a_list[1: 3] # [20, -4, (3, 4), 'crazyit', 3.4]
# 根據“元素值”刪除第一個和指定值相同的元素
a_list.remove(30) # # 刪除第一次找到的30:[20, 'crazyit', -4, (3, 4), 'crazyit', 3.4]
a_list.remove('crazyit') # 刪除第一次找到的'crazyit':[20, 30, -4, (3, 4), 'crazyit', 3.4]
a_list.remove(30) #再次嘗試刪除 30,引發 ValueEroor 錯誤
# 刪除整個列表
a_list.clear() # []
5. 修改元素的值
列表的元素相當於變量,因此程序可以對列表的元素賦值,即修改列表的元素;方法有兩種: 索引和 slice 語法。其中,在執行slice操作時,並不要求新賦值的元素個數與原來的元素個數相等。這意味着通過這種方式既可爲列表增加元素,也可爲列表刪除元素。下面介紹slice使用方法:
b_list = list(range(1, 5))
c_list = list(range(1, 10))
b_list[1: 3] = ['a', 'b'] # 從index=1開始取到index=3(不包含)元素賦值爲新列表的元素:[1, 'a', 'b', 4]
b_list[2: 2] = ['x', 'y'] # 從index=2開始取到index=2(不包含)元素賦值爲新列表的元素,就是插入“元素”:[1, 'a', 'x', 'y', 'b', 4]
b_list[2: 5] = [] # 從index=2開始取到index=5(不包含)元素賦值爲空列表,就是刪除:[1, 'a', 4]
# 指定step爲2,被賦值的元素有4個,因此用於賦值的列表也必須有4個元素
c_list[2: 9: 2] = ['a', 'b', 'c', 'd'] # [1, 2, 'a', 4, 'b', 6, 'c', 8, 'd']
6. list常用方法
列表包含的所有方法,如下所示:
dir(list)
[‘append’, ‘clear’, ‘copy’, ‘count’, ‘extend’, ‘index’, ‘insert’, ‘pop’, ‘remove’, ‘reverse’, ‘sort’]
函數 | 參數 | 功能 |
---|---|---|
.count() | obj 一個元素(可以是字符串,元組,列表等) | 用於統計列表中該元素出現的次數 |
.index() | obj,start,end | 在列表的指定範圍內搜索元素obj,返回index值;如果找不到該元素,會引發 ValueError 錯誤 |
.pop() | 空/index | 移除列表中指定索引處的元素,如果不指定,默認會移除列表中最後一個元素 |
.reverse() | 將列表中所有元素反向存放 | |
.sort() | key=None, reserse=False | 對列表元素進行排序(key 參數用於指定從每個元素中提取一個用於比較的鍵。例如 key=str.lower 表示在排序時不區分字母大小寫;reverse 參數用於設置是否需要反轉排序,默認 False 表示從小到大排序;如果將該參數設爲 True,將會改爲從大到小排序) |
注意:
其中使用 pop() 方法,可以實現一種常見的數據結構——棧。棧是一種特殊的數據結構,它可實現先入後出(FILO)功能,即先加入棧的元素,反而後出棧。
# .count()和.index()方法的使用
d_list = [2, 30, 'a', 'b', 'crazyit',[5, 30], 30]
d_list.count([5, 30]) # 計算列表中[5, 30]的出現次數
d_list.index(30)) # 定位元素30的出現位置
d_list.index(30, 2) # 從索引2處開始、定位元素30的出現位置
d_list.index(30, 2, 4) # 從索引2處到索引4處之間定位元素30的出現位置,因爲找不到該元素,會引發 ValueError 錯誤
# .sort()方法的使用
e_list = ['Python', 'Swift', 'Ruby', 'Go', 'Kotlin', 'Erlang']
e_list.sort() # 對列表元素排序:默認按字符串包含的字符的編碼大小比較
e_list.sort(key=len) # 指定key爲len,指定使用len函數對集合元素生成比較的鍵,也就是按字符串的長度比較大小
e_list.sort(key=len, reverse=True) # 指定反向排序