官术网_书友最值得收藏!

2.3 列表

前面學到的字符串是一種容器類型,容器類型就是指可以把多個元素整合在一起的類型,就像一個大包,可以把其他東西全丟進去。字符串只能把字符類型的元素整合在一起,如果想要把不同類型的元素整合在一起,可以使用列表。列表即list,作用是可以把任何類型的元素按照從左到右的順序放在一起,在寫法上是用半角中括號表示一個列表,列表里的元素用半角逗號分隔,比如說[66, 3.14, “Python”, [25, “Off i ce”]]就是一個列表,里面包含了整型、浮點型、字符串、列表,列表里面可以再放列表,所以只要你開心,列表是可以無限嵌套的。如果列表中沒有嵌套列表,我們把它叫作一維列表,如果嵌套了一層,我們把它叫作二維列表,嵌套兩層就是三維列表了,以此類推,生活中的四維、五維空間可能不好描述,但用列表描述一萬維都很輕松。

2.3.1 新建列表

創建一個空列表可以使用半角中括號“[ ]”也可以使用“list()”,代碼如下:

my_list1 = list()
my_list2 = []
print(type(my_list1), my_list1)  # 輸出:<class 'list'> []
print(type(my_list2), my_list2)  # 輸出:<class 'list'> []

如果你希望列表初始化的時候就有一些元素,可以把元素寫在中括號里,代碼如下:

my_list3 = ["A", 2, 3.0, []]
print(type(my_list3), my_list3)  # 輸出:<class 'list'> ['A', 2, 3.0, []]
print("my_list3有{}個元素".format(len(my_list3)))
# 輸出:my_list3有4個元素

2.3.2 查詢列表元素

我想你應該還沒有忘記可以使用索引和切片訪問字符串的元素,這同樣適用于列表,事實上,適用于所有容器類型。在講字符串的時候,已經解釋清楚索引和切片了,以后不再詳細講解它們的特點和用法,如果你是直接跳到這里的,麻煩你再原路跳回去,不用謝。來看看下面的代碼:

type_list = [
    "水果",
    ["蘋果", "梨", "蜜桃"],
    "設備",
    ["手機", "電腦", "平板"]
]
print(type_list[0])  # 輸出:水果
print(type_list[1])  # 輸出:['蘋果', '梨', '蜜桃']
print(type_list[1][-1])  # 輸出:蜜桃
sub_list = type_list[0:2]
print(sub_list)  # 輸出:['水果', ['蘋果', '梨', '蜜桃']]

上面是一個二維列表,第0個和第2個元素是字符串,第1和3個元素是列表。對于所有容器類型,都可以使用len()獲取元素長度(即元素個數)。索引和切片的參數都支持正數和負數,0代表第一個位置,-1代表最后一個位置。注意一下,如果要訪問嵌套列表的元素,需要一層一層去獲取,例如type_list[1][-1]表示先訪問列表type_list的第1個元素即[“蘋果”, “梨”, “蜜桃”],再訪問該元素的最后一個元素,即“蜜桃”。

還有一種情況是需要查詢某個元素的索引,我們可以使用list對象的index()方法,該方法只要傳入被查詢的元素對象即可返回該元素的索引,但如果該元素不存在,則報錯,與字符串的index()用法是一樣的。代碼如下:

type_list = [
    "水果",
    ["蘋果", "梨", "蜜桃"],
    "設備",
    ["手機", "電腦", "平板"]
]
data_index = type_list.index("設備")
print(f'"設備"的索引是{data_index}')  # 輸出:"設備"的索引是2
print(type_list.index("蘋果"))  # 報錯,因為type_list[1]才有"蘋果"

2.3.3 增加列表元素

如果想在列表末尾增加元素,可以使用list對象的append()方法,如果想在指定位置插入元素可以使用list對象的insert()方法。先看一下append()方法,代碼如下:

my_list = [1, 2, 3]
my_list.append(4)
my_list.append(5)
my_list.append(["A"])  # 輸出:[1, 2, 3, 4, 5, ['A']]
print(my_list)

再來看一下insert()方法,該方法可以傳入兩個參數:第一個參數是插入位置的下標,代表插入到第幾個元素的前面,注意下標是從0開始的;第二個參數是插入的值,即插入哪個元素。代碼如下:

my_list = ["A", "B", "C"]
my_list.insert(1, 20)
print(my_list)  # 輸出:['A', 20, 'B', 'C']
my_list.insert(25, "30")
print(my_list)  # 輸出:['A', 20, 'B', 'C', '30']

從代碼中可以看出,my_list.insert(1, 20)表示在列表my_list索引為1的元素(即“B”)的前面插入一個整型元素20,我們還可以發現如果該索引超過了列表的最大長度,它不會報錯,而是把元素插在了列表末尾。

2.3.4 修改列表元素

修改元素非常簡單,都用索引訪問到元素了,索性再給它重新賦個值不就是修改了嗎?看一下下面的代碼演示就秒懂了:

my_list = ["A", "B", "C"]
my_list[1] = "BBB"
print(my_list)  # 輸出:['A', 'BBB', 'C']

2.3.5 刪除列表元素

刪除元素也有好幾種方法,這里介紹三種比較常用的。

(1)如果你想刪除某個指定的元素,可以使用list對象的remove()方法,該方法只要傳入你要刪除的元素對象即可,每調用一次刪除一個元素,當要刪除的元素不存在的時候,程序會報“ValueError: list.remove(x): x not in list”的錯誤。代碼如下:

my_list = ["A", "B", "B", "B", "C"]
my_list.remove("B")
print(my_list)  # 輸出:['A', 'B', 'B', 'C']
my_list.remove("B")
my_list.remove("B")
print(my_list)  # 輸出:['A', 'C']
my_list.remove("B")  # 報錯

(2)如果你想通過下標刪除元素,可以使用list對象的pop()方法,該方法可以傳入一個參數指定被刪除元素的位置,如果不傳入參數則刪除最后一個元素,如果該位置對應的元素不存在則會報“IndexError: pop index out of range”的錯誤。另外還需要注意一下使用該方法刪除元素成功之后會返回被刪除的元素,我們可以使用變量去接收它。代碼如下:

                                      ?
my_list = ["A", "B", "C", "D"]
my_list.pop(0)
print(my_list)  # 輸出:['B', 'C', 'D']
del_data = my_list.pop()
print(del_data)  # 輸出:D
print(my_list)  # 輸出:['B', 'C']
my_list.pop(100)  # 報錯

(3)還有一種刪除的方法是調用Python的“del”關鍵字,它不僅能刪除列表里的元素,也可以刪除Python的任何變量,看一下下面的代碼:

my_list = ["A", "B", "C", "D"]
del my_list[2]
print(my_list)  # 輸出:['A', 'B', 'D']
del my_list
print(my_list)

代碼中my_list[2]是指訪問列表中索引為2 的元素,即“C”,然后使用關鍵字“del”刪掉該元素。如果你使用“del”刪除掉整個my_list變量,后面你再去訪問該變量的時候,程序就會報“NameError: name ‘my_list’ is not def i ned”的錯誤,所以“del”關鍵字一般用于手動釋放內存,但Python有一套比較完善的內存管理機制,所以我們一般很少主動使用“del”關鍵字。另外再提一下,既然“del”是Python的關鍵字,那么它能被當作變量使用嗎?如果你不能在0.5秒內想出答案,請翻回變量命名規則那里再復習一下。

如果想清空一個列表,或者說刪除列表的所有元素,可以使用列表對象的clear()方法,代碼如下:

my_list = ["A", "B", "C", "D"]
my_list.clear()
print(my_list)  # 輸出:[]

2.3.6 合并多個列表

如果想把多個列表合并成一個列表,該怎么操作?還記得加號嗎?數字類型可以相加,字符串也可以相加,其實列表也是可以相加的。代碼如下:

my_list1 = ["A", "B", "C"]
my_lis2 = ["a", "b", "c"]
my_lis3 = my_list1 + my_lis2
print(my_lis3)  # 輸出:['A', 'B', 'C', 'a', 'b', 'c']

列表相加不會改變原來的列表,而是會返回一個合并之后的新列表。另外列表也是可以相乘的,不管相加還是相乘,都不是對每一個元素進行算術運算,而是返回一個擁有重復元素的新列表。代碼如下:

my_list1 = [1, 2, 3]
my_list2 = my_list1 * 3
print(my_list1)  # 輸出:[1, 2, 3]
print(my_list2)  # 輸出:[1, 2, 3, 1, 2, 3, 1, 2, 3]

2.3.7 列表元素統計

如果想統計某個列表的元素個數的話,可以使用前文所提的len()函數,只要是容器類型都可以使用len()函數統計該容器的長度。len()函數是Python內置函數,比較常用的相似的函數還有max()和min()這兩個函數,分別用來獲取一個容器的最大值和最小值,代碼如下:

min_data = min([1, 20, 0])
print(min_data)  # 輸出0
max_data = max(["A", "f", "2"])
print(max_data)  # 輸出:f

上面的代碼使用min()函數獲取到列表[1, 20, 0]的最小值是0,還是比較容易理解的,但是用max()函數獲取列表[“A”, “f”, “2”]的最大值,返回的是字符“f”是為什么呢?因為當max()或min()函數的參數元素全部為字符串時,它們會全部比較元素的ASCII,字符“A”“f”“2”對應ASCII分別是65、102、50,所以max()函數返回的是“f”。如果這兩個函數參數的元素既有數字類型又有字符串類型,程序是會報錯的,不信的話可以動手試一下。

但如果是想知道某一個元素在列表里出現了幾次,這時候len()函數就不適用了,但我們可以使用list對象的count()方法進行統計,代碼如下:

my_list = ["A", "B", "B", "B", "C"]
print(my_list.count("B"))  # 輸出:3
主站蜘蛛池模板: 凭祥市| 河北区| 平定县| 关岭| 大宁县| 淮安市| 望江县| 利辛县| 宜丰县| 郸城县| 长宁区| 怀安县| 五峰| 堆龙德庆县| 海安县| 广灵县| 都江堰市| 江永县| 赣榆县| 仙游县| 南木林县| 广昌县| 治多县| 金门县| 威信县| 华容县| 玉环县| 普安县| 宁夏| 景泰县| 诏安县| 宾川县| 大化| 新平| 武冈市| 莫力| 盘山县| 宜黄县| 泸西县| 高雄县| 虹口区|