1. 程式人生 > 其它 >python基礎知識-列表

python基礎知識-列表

技術標籤:python基礎python資料型別

1 列表是什麼

列表是由一系列按特定順序排列的元素組成。可以包含字元,數字和字串,各元素之間沒有任何關係。一般情況,會給用於指向列表的變數命名為複數形式,如names。在python中,使用[]來表示列表,見一個簡單的示例:

names = ["zhan san","li si","wang er","ma zi"]#定義一個列表
print(names)

打印出來的結果為:

['zhan san', 'li si', 'wang er', 'ma zi']

2 訪問列表元素

列表是有序集合,要訪問列表中的任何一個元素,主要把整個元素在列表中的位置(索引)告訴python即可。要訪問列表元素,可指出列表的名稱,再指出元素的索引,並將其放在方括號內。

#定義一個列表
names = ["zhan san","li si","wang er","ma zi"]
#列印第二個元素
print(names[1])

#列印的結果:
li si

3 列表的索引

在python中,列表的索引從0開始,而不是從1開始。列表中的第一個元素的索引是0,而不是1。第二個元素的索引為1,根據這個簡單的計數方式,要訪問列表的任何元素,都可以將其順序減1的結果作為索引。例如,上面names這個列表,"ma zi"的索引為3,使用name[3]就可以提出"ma zi"。

#列印第四個元素
print(names[3])

#結果
ma zi

Python 為訪問最後一個列表元素提供了一種特殊語法。通過將索引指定為 -1 ,可讓 Python 返回最後一個列表元素:

#列印最後一個元素
print(names[-1])
#結果
ma zi

這種語法很有用,因為你經常需要在不知道列表長度的情況下訪問最後的元素。這種約定也適用於其他負數索引,例如,索引 -2 返回倒數第二個列表元素,索引 -3 返回倒數第三個列表元素,以此類推

4 使用列表中的各個值

可像使用其他變數一樣使用列表中的各個值。例如,你可以使用拼接根據列表中的值來建立訊息。

#定義一個列表
names = ["zhan san","li si","wang er","ma zi"]
print("this is my frind,his name is " + names[0] + "!,nice to meet you!")

#結果
this is my frind,his name is zhan san!,nice to meet you!

5 修改、新增和刪除元素

大多數列表都將是動態的,這意味著列表建立後,將隨著程式的執行增刪元素。例如我的friends列表,有一天其中一個朋友,他找你借錢,我借給了他,然後他不還我錢還拉黑了我,我的friends列表裡面就少了一個元素。再過一段時間,又有一個朋友找我借錢,我確實沒錢,自然沒有借給他,他覺得我夠朋友,酒吧我拉黑了,結果就是friends列表裡面又少了一個元素。一年後,老闆覺得我能力強,人品好,值得信賴,給我升值加薪,隨之我的社交圈子變大,朋友數量增加,我的friends列表長度就增加了。

5.1 修改列表元素

要修改列表元素,可指定列表名和要修改的元素的索引,再指定該元素的新值。比如說我朋友列表,麻子同志改跟岳父姓,成了張麻子,朋友列表就該如此變化。

friends = ["許三多","魏無忌","麻子","白樂天","劉夢禪","步驚雲","馬三寶"]
print(friends)
#結果
['許三多', '魏無忌', '麻子', '白樂天', '劉夢禪', '步驚雲', '馬三寶']

#修改“麻子”為“張麻子”
friends[2] = "張麻子"
print(friends)

#修改的結果
['許三多', '魏無忌', '張麻子', '白樂天', '劉夢禪', '步驚雲', '馬三寶']

根據需要,你可以修改任何列表元素的值,也可以修改多個元素的值。

5.2 在列表中新增元素

在實際中,我們可能出於各種各樣的原因需要增加列表中的元素,Python 提供了多種在既有列表中新增新資料的方式。

5.2.1 在列表末尾新增元素

列表中新增新元素時,最簡單的方式是將元素附加到列表末尾。給列表附加元素時,它將新增到列表末尾。繼續使用friends列表做實驗。

friends = ['許三多', '魏無忌', '張麻子', '白樂天', '劉夢禪', '步驚雲', '馬三寶']

#增加一個元素
friends.append("張三丰")
print(friends)

#結果
['許三多', '魏無忌', '張麻子', '白樂天', '劉夢禪', '步驚雲', '馬三寶', '張三丰']

方法 append() 將元素“張三丰”加如到了friends列表的最後位置,而不影響列表中的其他所有元素屬性。方法 append() 讓動態地建立列表易如反掌,使用append()可以在一個列表中多次的追加元素。實際中,我們無法提前預知列表中要存放的資料,我們經常要等程式執行後,才知道使用者要在程式中儲存哪些資料。為控制使用者,可首先建立一個空列表,用於儲存使用者將要輸入的值,然後將使用者提供的每個新值附加到列表中。

schoolmate = []
#連續追加
schoolmate.append("盧雲")
schoolmate.append("朱顏")
schoolmate.append("谷運")
print(schoolmate)

#結果
['盧雲', '朱顏', '谷運']

5.2.2 在列表中插入元素

使用方法 insert() 可在列表的任何位置新增新元素,因為列表是有順序的,為此,你需要指定新元素的索引和值。還以schoolmate為例

#第二個位置增加一個元素
schoolmate.insert(1,"柳長卿")
print(schoolmate)

#結果
['盧雲', '柳長卿', '朱顏', '谷運']

在這個示例中,在第二個位置(索引為1),增加了一個元素。這種操作將列表中插入位置右邊每個元素都右移一個位置,索引增加1。

5.3 從列表中刪除元素

實際中,經常需要從列表中刪除一個或多個元素,例如我的friends列表,某些原因,導致無法維持關係,我需要將拉黑的人員從friends列表中刪除,可以通過指定位置(索引)或值來刪除列表中的元素。

5.3.1使用 del 語句刪除元素

如果知道要刪除的元素在列表中的位置,可使用 del 語句。

friends = ["許三多","魏無忌","麻子","白樂天","劉夢禪","步驚雲","馬三寶"]
print(friends)
#刪除指定位置的元素
del friends[0]
print(friends)

#結果
['魏無忌', '麻子', '白樂天', '劉夢禪', '步驚雲', '馬三寶']

示例中,刪除了第一個位置(索引0)的元素,完成後,元素長度減1,刪除位置右邊的元素索引隨之減1。使用 del 可刪除任何位置處的列表元素,條件是知道其索引,使用 del 語句將值從列表中刪除後,你就無法再訪問和使用它了。

5.3.2使用方法 pop() 刪除元素(彈出)

方法 pop() 可刪除列表指定位置的元素,並讓你能夠接著使用它。列表就像一個棧,而pop刪除列表指定位置的元素相當於彈出棧頂元素。有時候,你要將元素從列表中刪除,並接著使用它的值。比如我的schoolmate列表。

schoolmate = []
#連續追加
schoolmate.append("盧雲")
schoolmate.append("朱顏")
schoolmate.append("谷運")
print(schoolmate)
schoolmate.insert(1,"柳長卿")
print(schoolmate)
#刪除指定位置的元素
new_scmate = schoolmate.pop(1)
print(new_scmate)
print(schoolmate)

#結果
['盧雲', '朱顏', '谷運']
['盧雲', '柳長卿', '朱顏', '谷運']
柳長卿
['盧雲', '朱顏', '谷運']

使用 del 語句還是 pop() 方法的判斷方法:如果你要從列表中刪除一個元素,且不再以任何方式使用它,就使用 del 語句;如果你要在刪除元素後還能繼續使用它,就使用方法 pop() 。

5.3.3根據值刪除元素

有時候,我們並不一定知道要從列表中刪除的值所處的位置,但是我們可能知道要刪除的值。如果你只知道要刪除的元素的值,可使用方法 remove() 。加入我要刪除我的friends中的“步驚雲”。

friends = ["許三多","魏無忌","麻子","白樂天","劉夢禪","步驚雲","馬三寶"]
print(friends)
del friends[0]
print(friends)

#修改“麻子”為“張麻子”
friends[2] = "張麻子"
print(friends)
#增加一個元素
friends.append("張三丰")
print(friends)
#刪除一個指定值的元素
friends.remove("步驚雲")
print(friends)

#結果
['許三多', '魏無忌', '麻子', '白樂天', '劉夢禪', '步驚雲', '馬三寶']
['魏無忌', '麻子', '白樂天', '劉夢禪', '步驚雲', '馬三寶']
['魏無忌', '麻子', '張麻子', '劉夢禪', '步驚雲', '馬三寶']
['魏無忌', '麻子', '張麻子', '劉夢禪', '步驚雲', '馬三寶', '張三丰']
['魏無忌', '麻子', '張麻子', '劉夢禪', '馬三寶', '張三丰']

注意 :方法 remove() 只刪除第一個指定的值。如果要刪除的值可能在列表中出現多次,就需要使用迴圈來判斷是否刪除了所有這樣的值。你將在第 7 章學習如何這樣做。

6 組織列表

實際中,在建立的列表中,元素的排列順序常常是無法預測的,因為我們並非總能控制使用者提供資料的順序,但是我們經常需要以特定的順序呈現資訊,所以,我們經常需要調整列表元素排列順序。 Python 提供了很多組織列表的方式,可根據具體情況選用。

6.1 方法 sort() 對列表進行永久性排序

方法 sort() 讓你能夠較為輕鬆地對列表進行排序。假設你有一個汽車列表,並要讓其中的汽車按字母順序排列。為簡化這項任務,我們假設該列表中的所有值都是小寫的。示例如下:

cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.sort()
print(cars)
#結果
['audi', 'bmw', 'subaru', 'toyota']

還可以按與字母順序相反的順序排列列表元素,為此,只需向 sort() 方法傳遞引數 reverse=True 。下面的示例將汽車列表按與字母順序相反的順序排列:

cars = ['bmw', 'audi', 'toyota', 'subaru']
#正序
cars.sort()
print(cars)
#反序
cars.sort(reverse = True)
print(cars)

#結果
['audi', 'bmw', 'subaru', 'toyota']
['toyota', 'subaru', 'bmw', 'audi']

6.2使用函式 sorted() 對列表進行臨時排序

要保留列表元素原來的排列順序,同時以特定的順序呈現它們,可使用函式 sorted() 。函式 sorted() 讓你能夠按特定順序顯示列表元素,同時不影響它們在列表中的原始排列順序。

cars = ['bmw', 'audi', 'toyota', 'subaru']
#臨時排序
print("now,the list is :")
print(cars)
print("\nafter sorted(),the list is :")
print(sorted(cars))
print("\nthe really list is :" )
print(cars)

#結果
now,the list is :
['bmw', 'audi', 'toyota', 'subaru']

after sorted(),the list is :
['audi', 'bmw', 'subaru', 'toyota']

the really list is :
['bmw', 'audi', 'toyota', 'subaru']

我們首先按原始順序列印列表,再按字母順序顯示該列表。以特定順序顯示列表後,我們進行核實,確認列表元素的排列順序與以前相同。最後,呼叫函式 sorted() 後,列表元素的排列順序並沒有變。如果你要按與字母順序相反的順序顯示列表,也可向函式 sorted() 傳遞引數 reverse=True 。

6.3 倒序

要反轉列表元素的排列順序,可使用方法 reverse() 。還用cars列表演示

cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.reverse()
print(cars)

#結果
['subaru', 'toyota', 'audi', 'bmw']

注意, reverse() 不是指按與字母順序相反的順序排列列表元素,而只是反轉列表元素的排列順序。方法 reverse() 永久性地修改列表元素的排列順序,但可隨時恢復到原來的排列順序,為此只需對列表再次呼叫 reverse() 即可。

6.4列表的長度

使用函式len()可以獲取列表的長度,列表長度是從1開始計數,如cars列表,他的長度就是4.

cars = ['bmw', 'audi', 'toyota', 'subaru']
#獲取長度
print(len(cars))

#結果
4