第三章 列表簡介(一)


    列表是一個很重要的章節內容,其實在Python中,主要是列表,字典,然后就是函數,類,類都是有各種功能的函數組成,只要掌握了列表、字典的性質,以及方法,然后了解函數的調用原則,參數是如何調用的,打好了這些堅實的基礎,后面對自己整個學習歷程都大有裨益。

3.1 列表是什么

    列表:由一系列特定順序排列的元素組成。我們可以創建包含字母表中的所有字母、數字0-9或所有家庭成員姓名的列表;也可以將任何東西加入列表中,其中的元素之間沒有任何關系。鑒於列表通常包含多個元素,給列表制定一個復數的名稱(如names,letters,usres等)是個不錯的注意。

    在Python中,用方括號([])來表示列表,並用逗號來分隔其中的元素。

注意:列表是有順序的,按照特定順序排列的,這點一定要牢記,因為只有了解了列表有序的,才能夠明白為什么要調用列表中的元素,以及調用的原則。而且這是列表獨有的性質。

bicycles.py

bicycles = ["trek","cannodale","redline",'speciaized']
print(bicycles)

results:

['trek', 'cannodale', 'redline', 'speciaized']

3.1.1 訪問列表元素

    列表是有序集合,按照特定順序排列的元素組成,因此我們要訪問列表中的元素,只需要告訴Python該元素的位置或索引。要訪問列表元素,可指出列表的名稱,再指出元素的索引,並將其放在方括號內。

3.1.2 索引從0而不是從1開始

    在Python中,第一個列表元素的索引為0,而不是1。在大多數編程語言中都是如此,這與列表操作的底層實現相關。如果結果出乎意料,請看看是否犯了簡單的差一錯誤。

    第二個列表元素的索引為1,根據這種簡單的計數方式,要訪問列表的任何元素,都可以將其位置減1,並將結果作為索引。

    Python為訪問最后一個列表元素提供了一種特殊語法。通過將索引指定為-1,可讓Python返回最后一個列表元素,如bicycles[-1]返回列表最后一個元素“speciaized".

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

3.1.3  使用列表中的各個值

    可像使用其他變量一樣使用列表中能夠的各個值。例如,你可以使用拼接根據列表中的值來創建消息。

    下面來嘗試從列表中提取第一款自行車,並使用這個值來創建一條消息:

    bicycles = ["trek","cannodale","redline",'speciaized']
    message = "My first bicycle was a " + bicycles[0].title() + "."
    print(message)

    我們使用bicycles[0]的值生成了一個句子,並將其存儲在變量message中。輸出是一個簡單的句子,其中包含列表中的第一款自行車。

    My first bicycle was a Trek.

動手試一試

    3-1 姓名: 將一些朋友的姓名存儲在一個列表中,並將其命名為names。以此訪問該列表中的每個元素,從而將每個朋友的姓名都打印出來。

    3-2 問候語: 繼續使用練習3-1中的列表,但不打印每個朋友的姓名,而為每個人打印一條消息。每條消息都包含相同的問候語,但抬頭為相應朋友的名字。

    3-3 自己的列表: 想想你喜歡的通勤方式,如騎摩托車或開汽車,並創建一個包含多種通勤方式的列表。根據該列表打印一系列有關通勤方式的宣言,如”I would like to own a Honda motorcycle"。

分析:

    3-1 本題的主要目的是遍歷列表中的每一個元素,首先定義一個列表,然后以此對每個列表進行遍歷

    names = ["tom","zengmignzhu","gengchangxue","dlj"]
   print(names[0])
   print(names[1])
   print(names[2])
   print(names[3])

    首先定義了一個列表,然后以此對列表中的每個元素進行遍歷,輸出結果如下:

tom
zengmignzhu
gengchangxue
dlj

    從中可以看出列表是有序的,而且一定要牢記,列表的表示方式,列表名加上索引號,在中括號[]里面添加索引號。

    3-2 本題是第一題的提升,也是輸出名字,只是要使用拼接合並的功能,目的就是為了鍛煉使用拼接合並功能。

 

    names = ["tom","zeng mign zhu","geng chang xue","dlj"]
print(names[0].title() + " is my great firend.")
print(names[1].title() + " is a excellent student.")
print(names[2].title() + " is my girl friend.")
print(names[3].title() + " is my good friend")
結果輸出:
Tom is my great firend.
Zeng Mign Zhu is a excellent student.
Geng Chang Xue is my girl friend.
Dlj is my good friend

    3-3 本題也是考察列表的調用方式,字符串的拼接功能

    commuting_modes = ["by car","ride motorcycle","on foot",'by bus']

3.2 修改、添加和刪除元素

    我們創建的列表大多數都是動態的,這意味着列表創建后,將隨着程序的運行增刪元素。例如,我們創建一個游戲,要求玩家射殺從天而降的外星人;為此,可在開始時將一些外星人存儲在列表中,然后每當有外星人被射殺時,都將其從列表中刪除,而每次有新的外星人出現在屏幕上時,都將其添加到列表中。在整個游戲運行期間,外星人列表的長度將不斷變化。

3.2.1 修改列表元素

    修改列表元素的語法與訪問列表元素的語法類似。要修改列表元素,可指定列表名和要修改的元素的索引,再指定該元素的新值:

 

motorcycles = ['honda','yamha','suzuki']
print(motorcycles)

motorcycles[0] = "ducati"
print(motorcycles)
我們首先定義一個摩托車列表,其中第一個元素為“Honda”。接下來,我們將第一個元素的值改為'ducati'。輸出結果如下:顯示確實改了
['honda', 'yamha', 'suzuki']
['ducati', 'yamha', 'suzuki']
我們可以修改列表中任意一個位置的元素,只要我們知道修改的位置以及目的。
3.2.2 在列表中添加元素
我們可能出於應用,在列表中添加新的元素。例如,希望游戲中出現新的外星人,添加可視化數據或給網站添加新注冊的用戶。Python提供了多種在既
有列表中添加新元素的方法。
1、在列表末尾添加元素
在列表中添加新元素時,最簡單的方法是將元素附加到列表的末尾。給列表添加元素時,它將添加到列表末尾。方法append(),在列表末尾添加元素。
方法append():
append(...)
L.append(object) -- append object to end(在列表末尾添加元素)
motorcycles.py
motorcycles = ['honda','yamha','suzuki']
motorcycles.append()
print(motorcycles)
motorcycles.append("ducati")
print(motorcycles)
注意:因為也沒有實踐過append()添加一個空的參數是怎樣的,當參數省略的時候程序報錯,如下:
Traceback (most recent call last):
  File "/home/zhuzhu/title3/motorcycles.py", line 2, in <module>
    motorcycles.append()
TypeError: append() takes exactly one argument (0 given)
錯誤的原因是方法append()沒有參數,append()方法要有一個參數,但是(0 given)沒有給參數,故而系統報錯。
當給append()添加參數時如下:
motorcycles = ['honda','yamha','suzuki']
#motorcycles.append()
print(motorcycles)
motorcycles.append("ducati")
print(motorcycles)
results:
['honda', 'yamha', 'suzuki']
['honda', 'yamha', 'suzuki', 'ducati']
這次,我們將"ducati"添加到了列表的末尾,沒有出現錯誤。
motorcycles = ['honda','yamha','suzuki']
motorcycles.append(" ")
motorcycles.append("")
print(motorcycles)
motorcycles.append("ducati")
print(motorcycles)


results:
['honda', 'yamha', 'suzuki', ' ', '']
['honda', 'yamha', 'suzuki', ' ', '', 'ducati']
當我們向程序添加空文本和空格的時候,程序都可以正常運行,而且結果里面也包含了''和" ",說明只要append()方法有參數,系統就不會報錯,沒有參數
程序就會出錯。
方法append()讓動態創建列表易如反掌,例如,我們可以先創建一個空列表,再使用一系列的append()語句添加元素。下面來創建一個空列表,再在其中添加
元素”honda","yamha"和"suzuki":
motorcycles = []
motorcycles.append("honda")
motorcycles.append("yamha")
motorcycles.append("suzuki")
print(motorcycles)
運行結果如下:
['honda', 'yamha', 'suzuki']
motorcycles = ["honda","yamha","suzuki"]
motorcycles.insert(0,"ducati")
print(motorcycles)
#現在有四個元素,我們看一下下表越界會有什么樣的結果
motorcycles.insert(7,"sb")
motorcycles.insert(-7,"bs")
print(motorcycles)


運行結果:
['ducati', 'honda', 'yamha', 'suzuki']
['bs', 'ducati', 'honda', 'yamha', 'suzuki', 'sb']
從運行結果看,我們可以在我們制定的位置添加新的元素,只要制定新元素的索引和值就可以,我們也驗證了上標和下標超界的情況,可以看出,無論是上標越界
還是下標越界,程序都沒有報錯,而是正常運行的,下標超界就在最后一個位置添加元素,上標超界就在最前面添加元素

總結:向列表中插入元素的方法有兩種,第一是在末尾添加元素,append()方法,這種方法append()的參數一定要有,不能沒有參數,可以添加任
何元素,''和" "等都可以,但是參數不能省略,而且不用指定位置,在生成新的列表的時候很有用;insert()方法是在列表任意位置添加元素,insert()
方法有兩個參數,而且都不可以空缺,在插入的時候必須同時給兩個參數指定值,有興趣可以嘗試一下,而且上下標可以越界,如果想每次在列表開頭
添加元素的話,只需要執行L.insert(0,object),這樣就能夠每次在列表的開頭添加元素,是對append()方法的一種補充。更為重要的是,當列表是空
列表的時候,使用insert()方法也不會報錯,這點真的是挺強大的,在使用的時候我們不必要過分擔心上下標越界的情況,也不用擔心在使用過程中,如果
列表是空,會不會出錯的問題。
向列表中添加新的元素,這兩個方法都可以很好的使用,具體情況具體使用,都很好這兩個方法。
motorcycles = []
#motorcycles.insert(0,"ducati")
print(motorcycles)
#現在有四個元素,我們看一下下表越界會有什么樣的結果
motorcycles.insert(7,"sb")
motorcycles.insert(-7,"")
print(motorcycles)
運行結果:
[]
['',
'sb']
從中可以看出,insert()方法還是很強大的,空,越界都沒有出現程序報錯問題。可以放心大膽使用。

3.2.3 從列表中刪除元素
我們不僅經常向列表中添加元素,而且還經常從列表中刪除元素,從列表中刪除一個或多個元素。例如,游戲玩家將空中的一個外星人射殺后,我們就
很可能將其從存活的外星人列表中刪除;當用戶在你創建的Web應用中注銷其賬戶時,我們也需要將該用戶從活躍列表中刪除。我們可以根據位置或值來刪除
列表中的元素。(位置和值)我們知道刪除元素的位置或者要刪除那個元素。
1
.使用del語句刪除元素
如果我們知道刪除元素在列表中的位置,可使用del語句。
motorcycles = ["honda","yamha","suzuki"]
print(motorcycles)
#刪除列表中第0個位置的值
del motorcycles[0]
print(motorcycles)


運行結果:
['honda', 'yamha', 'suzuki']
['yamha', 'suzuki']
我們知道我們要刪除的是第0個位置的元素,因而我們使用del刪除了列表中第0個位置的值,del的使用方法是del + L.[i]
使用del可刪除任何位置的列表元素,前提是我們知道它在列表中的位置,既其索引。下面來看如何刪除前述列表中第二個元素——"yamaha":
motorcycles = ["honda","yamha","suzuki"]
print(motorcycles)
#刪除列表中第0個位置的值
del motorcycles[1]
print(motorcycles)
運行結果:
['honda', 'yamha', 'suzuki']
['honda', 'suzuki']
從中我們看出,使用del刪除列表元素方法是要我們知道元素在列表中的具體位置,既索引。del + L[i]
使用del方法將元素從列表中刪除之后,列表中就不存在這個值了,我們就無法在訪問它了。
下面我們來嘗試一下上下標越界的情況:
motorcycles = ["honda","yamha","suzuki"]
print(motorcycles)
#刪除列表中第0個位置的值
del motorcycles[-5]
del motorcycles[5]
print(motorcycles)
運行結果:
['honda', 'yamha', 'suzuki']
Traceback (most recent call last):
  File "/home/zhuzhu/title3/motorcycles.py", line 4, in <module>
    del motorcycles[-5]
IndexError: list assignment index out of range
從結果中我們可以看出是索引出現了問題(IndexError),索引錯誤的原因是索引超界。因而在使用del刪除的時候,一定是知道了元素的具體位置,然后
進行刪除,如果列表是空的肯定也會報錯,不像insert()方法那樣。因為del是刪除列表中的元素,索引值超過的時候這個元素在列表中根本就不存在
因此不能夠進行刪除,系統會報錯。

2 使用方法pop()刪除元素
pop(...)
 |      L.pop([index]) -> item -- remove and return item at index (default last).
 |      Raises IndexError if list is empty or index is out of range.

從pop()方法的說明看,pop()方法移除和返回元素,從一個列表中移除,然后返回給另外一個變量,而且如果列表是空的,或者索引超界,都會出現錯誤。
有時候,我們要將元素從列表中刪除,並接着使用它。例如,我們可能要獲取剛被射殺的外星人的x和y坐標,以便在相應的位置顯示爆炸的效果;在Web應用中,
我們可能將用戶從活躍成員列表中刪除,並將其加入到非活躍成員列表中。
方法pop()可以刪除列表末尾的元素,並讓我們能夠接着使用它。術語彈出(pop)源自這樣的類別比:列表就像一個棧,而刪除列表末尾的元素相當於彈出棧頂元素。
下面從列表motorcycles中彈出一款摩托車:
motorcycles = ["honda","yamha","suzuki"]
print(motorcycles)
#從列表中彈出一個新的元素並將它賦值給poped_motorcycle,接着使用它
poped_motorcycle = motorcycles.pop()
print(motorcycles)
print(poped_motorcycle)
運行結果:
['honda', 'yamha', 'suzuki']
['honda',
'yamha']
suzuki

3.彈出列表中任何位置的元素
pop(...)
 |      L.pop([index]) -> item -- remove and return item at index (default last).
 |      Raises IndexError if list is empty or index is out of range.

由L.pop([index])可以看出,在pop中是可以指定參數的,我們能夠刪除任意位置的值,只需要在括號中制定要刪除的元素的索引即可。
motorcycles = ["honda","yamha","suzuki"]

first_owned = motorcycles.pop(0)
second_owned = motorcycles.pop(1)
print("The first motorcycle I owned was a " + first_owned.title() + ".")
print(second_owned)
運行結果:
The first motorcycle I owned was a Honda.
suzuki
從運行結果可以看書,我們能夠指定要彈出那個位置的元素,而且我們也可以驚訝的發現,當我們彈出pop(1)的時候輸出的結果不是我們想象的"yamha",
那是因為當我們把其中一個彈出來的時候,剩下的列表的元素發生了改變,后面的會自動補缺被彈出的元素的位置,這個時候,元素的長度是減一的,所以
我們要彈出pop(1)的時候,其實彈出的是列表["yamha","suzuki"]中的pop(1),這個時候就彈出了"suzuki"。這個問題在使用remove的時候也會遇到,
一定要在這一塊注意,當我們從列表中刪除元素的時候,列表的長度是發生變化的,被刪除元素的位置會被后面緊挨着的元素替代。
所以,要牢記,當我們使用pop()方法時,被彈出的元素就不再列表中了。
如果不確定該使用del語句還是pop()方法,下面是一個簡單的判斷標准:如果你要從列表中刪除一個元素,且不再以任何方式使用它,就使用del語句,
如果你要在刪除元素后還能繼續使用它,就使用方法pop()

4.根據值刪除元素
 
        
numbers = [2,5,2,2,5,0,99,2,2,2]
for number in numbers:
if number == 2:
numbers.remove(number)
print(numbers)
運行結果:
[5, 2, 2, 5, 0, 99, 2, 2, 2]
[5, 2, 5, 0, 99, 2, 2, 2]
[5, 5, 0, 99, 2, 2, 2]
[5, 5, 0, 99, 2, 2]
可能很多人會迷惑,為什么還有2沒有刪除,為什么5和5之間沒有2,這些是什么情況,下面來看裕興情況:
[2,5, 2, 2, 5, 0, 99, 2, 2, 2] ---numbers[0]
[5, 2, 2, 5, 0, 99, 2, 2, 2]     ---numbers[1]
[5, 2, 5, 0, 99, 2, 2, 2]         ---numbers[2]
[5, 2, 5, 0, 99, 2, 2, 2] ---numbers[3]
[5, 2, 5, 0, 99, 2, 2, 2] ---numbers[4]
[5, 2, 5, 0, 99, 2, 2, 2] ---numbers[5]
[5, 5, 0, 99, 2, 2, 2] ---numbers[6]
[5, 5, 0, 99, 2, 2] ---numbers[7]
首先我們要明確,for循環內置計數器,首先我們從numbers列表中循環第一個元素,等於2,然后移除,然后從列表中循環numbers[1],此時numbers列表
第二個元素是2,刪除,然后運行numbers[2],由於在[5, 2, 5, 0, 99, 2, 2, 2]中numbers[2]是5,所以程序繼續執行,但是沒有刪除元素,循環值numbers[3]
,numbers[3]是0,不滿足,繼續循環,numbers[4]是99,不滿自繼續執行,當到numbers[5]的時候,值為2,此時要刪除列表中的2,可能很多人這里不明白,剛開始
我也是這樣,我們還記得remove()方法的屬性嗎?刪除第一個遇到的值,此時5和5之間的2遭殃了,由於在最前面,所以刪除的是這個2,而不是列表[5, 2, 5, 0, 99, 2, 2, 2]
中numbers[5]位置的2,這點我們一定要基礎。
總結:刪除列表中元素的方法有del語句,pop()方法和remove()方法,如何使用這三種方法呢?首先,del語句是刪除列表中指定的值,我們知道這個值的位置索引,然后刪除這個
值,del + L[],是我們知道了這個元素在列表中的具體位置,位置索引,然后進行的刪除,而pop()方法如果沒有制定參數的話默認是彈出最后一個參數,而且彈出的值可以再次使用,
pop(0)可以每次彈出第一個元素的值,del + L[0]效果等同,而remove()方法適用於我們知道這個元素具體的值,知道要把某個具體的元素從列表中刪除,刪除的是具體的元素值,而
不是索引的方式。remove(object),但是無論那種方法,我們一定要牢記,但把原列表中值刪除的時候,原來列表的值必定發生了變化,長度也發生了變化,索引值發生了改變,刪除
元素的位置會被后面的元素補缺上。這點一定要記住,在使用刪除的時候一定要選擇正確的刪除方式,避免發生不必要的錯誤。

動手試一試
3-4 嘉賓名單:
如果你可以邀請任何人一起共進晚餐(無論是在世的還是故去的),你會邀請納西人?請創建一個列表,其中包含至少3個你想邀請的人;然后,請使用這個列表打印消息,邀請這些人
共進晚餐;

3-5 修改嘉賓名單:
你剛得知有位嘉賓無法赴約,因此需要另外邀請以為嘉賓
1、以完成練習3-4時編寫的程序為基礎,在程序的末尾添加一條print語句,指出哪位嘉賓無法赴約。
2、修改嘉賓名單,將無法赴約的嘉賓的姓名替換為新邀請的嘉賓的姓名;
3、再次打印一條消息,向名單中的每位嘉賓發出邀請。

3-6 添加嘉賓:
你剛找到了一個更大的餐桌,可容納更多的嘉賓。請想想你還想邀請哪三位嘉賓。
1、以完成聯系3-4或練習3-5為基礎,在程序的末尾添加一條print語句,指出你找到了一個更大的餐桌。
2、使用insert()將一位新嘉賓添加到名單開頭;
3、使用insert()將另一位新嘉賓添加到名單中間;
4、使用append()將最后一位新嘉賓添加到名單末尾;
5、打印一系列消息,向名單中的每位嘉賓發出邀請。
invitation_friends = ["Sora Aoi","Maria Ozawa","Ria Sakurai","Yoshizawa Akiho"]
#首先定義了一個要邀請的列表,然后遍歷每個名字
print("I'd like to invite " + invitation_friends[0] + " to dinner.")
print("I'd like to invite " + invitation_friends[1] + " to dinner.")
print("I'd like to invite " + invitation_friends[-2] + " to dinner.")
print("I'd like to invite " + invitation_friends[-1] + " to dinner.")


運行結果:
I'd like to invite Sora Aoi to dinner.
I'd like to invite Maria Ozawa to dinner.
I'd like to invite Ria Sakurai to dinner.
I'd like to invite Yoshizawa Akiho to dinner.
要記住列表的集中表示方法,L[0],L[1],L[-1],L[-2]
3-5 本題主要考察列表元素的修改方法,以及再次鍛煉大家列表表示方法的使用
invitation_friends = ["Sora Aoi","Maria Ozawa","Ria Sakurai","Yoshizawa Akiho"]
print("Because Yoshizawa Akiho has something spical,don't come to dinner.")
#修改列表中的元素,列表中第四個元素的值,主要是列表中元素的重新賦值
invitation_friends[3] = "Yoshiko Kawashima"
print(invitation_friends)
for invitation_friend in invitation_friends:
print("I'd like to invite " + invitation_friend + "to have dinner.")


運行結果:
Because Yoshizawa Akiho has something spical,don't come to dinner.
['Sora Aoi', 'Maria Ozawa', 'Ria Sakurai', 'Yoshiko Kawashima']
I'd like to invite Sora Aoito have dinner.
I'd like to invite Maria Ozawato have dinner.
I'd like to invite Ria Sakuraito have dinner.
I'd like to invite Yoshiko Kawashimato have dinner.
3-6 本題主要是練習使用insert()方法,添加元素的方法,append(),insert()
invitation_friends = ["Sora Aoi","Maria Ozawa","Ria Sakurai","Yoshizawa Akiho"]
print("I find a bigger dinner ,so I can invite more friends to have dinner together.")
#使用方法insert()一定要告訴Python插入到列表哪里去
invitation_friends.insert(0,"Obama")
invitation_friends.insert(2,"Namitano Yoshii")
invitation_friends.append("Sea Wing")
for friend in invitation_friends:
print("I'd like to invite " + friend + " to have dinner.")
運行結果:
I find a bigger dinner ,so I can invite more friends to have dinner together.
I'd like to invite Obama to have dinner.
I'd like to invite Sora Aoi to have dinner.
I'd like to invite Namitano Yoshii to have dinner.
I'd like to invite Maria Ozawa to have dinner.
I'd like to invite Ria Sakurai to have dinner.
I'd like to invite Yoshizawa Akiho to have dinner.
I'd like to invite Sea Wing to have dinner.

3-7 本題主要目的是練習刪除列表元素的方法
invitation_friends = ["Sora Aoi","Maria Ozawa","Ria Sakurai","Yoshizawa Akiho"]
#print("I find a bigger dinner ,so I can invite more friends to have dinner together.")
#使用方法insert()一定要告訴Python插入到列表哪里去
invitation_friends.insert(0,"Obama")
invitation_friends.insert(2,"Namitano Yoshii")
invitation_friends.append("Sea Wing")
print("I am sorry to that I can not buy the table in a timely manner, so I can only invite two friends.")
for i in range(len(invitation_friends)):
not_in = invitation_friends.pop()
num = len(invitation_friends)
if num == 2:
break
else:
print("I am sorry, " + not_in)
print(invitation_friends)

del invitation_friends[0]
print(invitation_friends)
del invitation_friends[0]
print(invitation_friends)
 







 
 
 




 
 
 
        
 










 
 
        







 
        
 



 

 

 

   

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM