第四章4:使用列表
第四章4:使用列表
現(xiàn)在我們已經(jīng)學習了什么是列表和如何使用循環(huán),我們今天將學習如何使用列表。在Python中,列表對于任何程序都非常重要,所以,我們需要理解我們什么時候使用它們。
檢查長度
通常我們將需要知道一個列表中包含多少個對象。為了實現(xiàn)這個目標,我們使用len()函數(shù):
# 檢查列表中對象的數(shù)量
nums = [5, 10, 15]
length = len(nums) # len()返加一個整數(shù)
print(length)
繼續(xù)并運行這一代碼塊。這個代碼塊將輸出整數(shù)3。我們后面將多次使用length函數(shù),無論是檢查一個空列表還是在range函數(shù)中使用它來角確定一個循環(huán)的次數(shù)。
列表切片
回顧前幾周,我們討論了一個字符的切片。列表切片也是同樣的方式,以便于我們能夠獲得特定的對象。切片和range()函數(shù)具有一樣的參數(shù),如開始、結(jié)束、步長:
# 用切片獲取一個列表中的特定對象
print(nums[1:3]) # 輸出結(jié)果為索引位置1和2上的對象
print(nums[:2]) # 輸出結(jié)果為索引位置0和1上的對象
print(nums[::2]) # 輸出結(jié)果為索引位置0,2和4上的對象,即索引從數(shù)字0開始,每次遞增2
print(nums[-2:]) # 輸出結(jié)果為列表中最后兩個的對象
繼續(xù)并運行這一代碼塊。輸出結(jié)果顯示在每個語句后邊的注釋中。我們使用方括號表示法,正如我們訪問索引一樣,只是我們通過冒號分開其他值,而順序剛保持為[開始:停止:步長]。方括號表示法默認從0開始,步長為1。如果你想使用默認值,可以選擇不使用這些值。對于步長為正而開始值為負將會使切片從后向前獲取數(shù)據(jù)。如果從開始位置或停止的位置使用負數(shù),則切片將從后面開始或停止。這意味著,如果你將停止位置上為-5,切片獲取的對象將從列表的開頭一直切到列表結(jié)束之前的五個元素。
增加元素
當你需要向你的現(xiàn)有列表中添元素,Python有兩個不同的方法來實現(xiàn)這一目標。
.append()
Append方法總是將值添加到列表內(nèi)元素的后面。讓我們來看一下:
# 使用append方法將增加一個元素到列表內(nèi)元素的后面
nums = [10, 20]
print(nums) # 輸出[10, 20]
nums.append(5)
print(nums) # 輸出[10, 20, 5]
繼續(xù)并運行這一代碼塊。我們創(chuàng)建了一個包含兩個元素的列表,然后將數(shù)值5添加到列表的后面。
.insert()
增加一個元素到列表中的第二個方法是使用insert函數(shù)。這一方法需要一個索引值才能將增加的值插入到指定位置。讓我們來看一個例子:
# 在列表最開始的位置增加一個數(shù)值
words = ['ball', 'base']
print(words) # 輸出結(jié)果為['ball', 'base']
words.insert(0, 'golve') # 第一個參數(shù)是索引,第二個是數(shù)值
print(words) # 輸出結(jié)果為['golve', 'ball', 'base']
繼續(xù)并運行這一代碼塊。輸出結(jié)果為['glove','ball','base']。glove現(xiàn)在在零索引位置上,因為我們在insert方法中指定了在該索引位置上插入數(shù)值。
移除元素
從一個列表中移除元素有多種方式,接下來我主要介紹其中的兩種方法。
.pop()
默認情況下,pop方法會移除列表中最后一個元素,當然,你也可以指定索引去移除元素。這種方法也被廣泛的用來存儲被移除的元素。當使用pop方法時,它不僅稱除了相應的元素,而且還會返回這個元素。這就可以讓我們使用一個變量來存儲從列表中移除的那個元素,以便之后使用:
# 使用pop方法移除元素并將其存儲到一個變量中以便之后使用
items = [5, 'ball', True]
items.pop() # 默認移除列表中最后一個元素
removed_item = items.pop(0) # 移除元素5并存儲進removed_item變量中
print(removed_item, '\n', items)
繼續(xù)并運行這一代碼塊。使用pop方法,我們可以看到它首先移除了列表中最后一個元素True,那么,接著移除了索引位置0上的元素5。當整數(shù)5移除列表時,我們同時將其保存到一個新變量中,然后將其與新列表一起輸出。
.remove()
remove方法允許我們基于給定的元素來從列表中移除相應的元素:
# 用一個try和except來使用remove方法
sports = ['bseball', 'soccer', 'football', 'hockey']
try:
sports.remove('soccer')
except:
print('That item does not exist in the list')
print(sports)
繼續(xù)并運行這一代碼塊。在這里,我們將看到結(jié)果輸出的是沒有元素soccer的列表,這是因為元素soccer剛剛已經(jīng)被我們刪除了。另外要說明的一點是,我們之所以嘗試使用try和except結(jié)構(gòu)語句,是因為如果列表中不存在元素“soccer”,則可以防止該程序崩潰。
使用數(shù)值列表數(shù)據(jù)
對于我們使用的數(shù)值型數(shù)據(jù),Python為我們提供了一些函數(shù)來了解數(shù)值型數(shù)據(jù)的特征,如min(求最小值)、 max(求最大值)和sum(求和)。盡管這些是最常用的一些函數(shù),但是我們?nèi)匀挥懈嗟暮瘮?shù)可使用:
# 使用min,max和sum
nums = [5, 3, 9]
print(min(nums)) # 輸出列表中最小值
print(max(nums)) # 輸出列表中最大值
print(sum(nums)) # 輸出列表中所有數(shù)值的和
繼續(xù)并運行這一代碼塊。輸出結(jié)果將為3、9和17。正如其名稱所述,他們將找到列表中的最小值和最大值。sum函數(shù)則將簡單地將列表中所有數(shù)字加總求和。
列表排序
在實際應用中,你經(jīng)常會使用一個有序的列表。在Python中有兩種方法可以實現(xiàn)這一目標,但這兩種方法又存在一定差異。一個會直接覆蓋原始列表,另一個則會返回一個新創(chuàng)建的列表。
sorted()
sorted函數(shù)無論對數(shù)值型列表還是字符型列表都是有效的,但對于二者混合的列表則是無效的。sorted函數(shù)結(jié)果會返回一個列表的副本,所以它不會改變原始列表。通常來說,如果你需要保留原始且完整的列表,則使用這一函數(shù):
# 對于數(shù)值型列表和字符型列表使用sorted方法排序
nums = [5, 8, 0, 2]
sorted_nums = sorted(nums) # 使用sorted方法排序后存儲在一個新變量中
print(nums, sorted_nums) # 輸出原始的列表和排序后的列表
繼續(xù)并運行這一代碼塊。你會注意到,在聲明nums列表時,其輸出結(jié)果仍是保持原始順序的列表。要獲取新的排序后列表,我們只需將其保存到一個新變量中即可。
.sort()
sort方法的使用目的與我們上面所講的sorted函數(shù)目的相同;但是,不同的是它會直接更改并覆蓋原始列表:
# 使用.sort()函數(shù)對列表進行排序
nums = [5, 0, 8, 3]
nums.sort() # 真接更改并覆蓋原始列表
print(nums)
繼續(xù)并運行這一代碼塊。結(jié)果輸出將是一個正確排序后的列表。只需記住,nums變量現(xiàn)在已更改,因為.sort()函數(shù)直接更改了變量的值。
條件和列表
在實際使用列表時,我們通常需要檢查列表中的某一元素量否存在?,F(xiàn)在我將介紹如何在一個列表中運行條件語句。將列表和條件語句相結(jié)合的原因有很多。以下幾個例子只是其中的幾種原因。
使用“in”和“not in”關(guān)鍵詞
上周介紹條件語句時,我們已經(jīng)看到了這些關(guān)鍵字的使用。使用列表時,它們的目的是在列表中快速查找對應的值:
# 在一個列表中使用條件語句
names = ['Jack', 'Robert', 'Mary']
if 'Mary' in names:
print('found') # 當Mary在列表中將會運行這一代碼
if 'Jimmy' not in names:
print('not found') # 當Jimmy不在列表中將會運行這一代碼
繼續(xù)并運行這一代碼塊。輸出結(jié)果為“found”和“not found”。在第一個語句中,我們試圖查看列表中是否存在“Mary”,結(jié)果確實存在。第二個條件語句檢查“ Jimmy”是否不存于列表中,這也是正確的,因此它也可以運行。
檢查一個空列表
對于空列表的檢查有很多原因,提及最多的就是確保在你的程序中不會引發(fā)任何錯誤,接下來,讓我們來看如何對空列表進行檢查:
# 使用條件語名來查看列表是否為空
nums = []
if not nums: # 等價于語法:if nums = []
print('empty')
繼續(xù)并運行這一代碼塊。這將會輸出“empty”。它在注釋我們已經(jīng)提到,但我們也可以檢查一下是否等于空括號。在這里,我想向你展示如何使用“ not”關(guān)鍵字。為了檢查列表的元素,你將寫下這樣代碼:
if nums
循環(huán)和列表
你能使用for循環(huán)和while循環(huán)去迭代列表中的元素。
使用for循環(huán)
當使用for循環(huán)迭代列表中的元素時,語法上看起來像之前我們使用的range()函數(shù)。然而,這次我們使用一個暫時變量,關(guān)鍵詞in和列表名稱。對于每一次迭代,這個臨時變量都會被分配一個新的元素的值。讓我們來試試看。
# 使用for循環(huán)列印列表中的所有元素
sports = ['Baseball', 'Hockey', 'Football', 'Basketball']
for sport in sports:
print(sport)
繼續(xù)并運行這一代碼塊。在這里,我們可以看到這一代碼塊將輸出列表中的每個元素。在第一次迭代期間,臨時變量“ sport”被分配為“ Baseball”,一旦將其打印出來,它將移至下一個列表中的元素。
使用while循環(huán)
while循環(huán)通常用于條件循環(huán)。while循環(huán)一個比較典型的用法就是移除列表中的元素。while循環(huán)還有很多用法,這僅僅是眾多用法中的一種:
# 使用while循環(huán)移除一個特定值
names = ['Bob', 'Jack', 'Rob', 'Bob', 'Robert']
while 'Bob' in names:
names.remove('Bob') # 移除列表中的所有的Bob字符
print(names)
繼續(xù)并運行這一代碼塊。變量names輸出結(jié)果將是沒有字符“ Bob”的列表。我們將while循環(huán)與條件語句結(jié)合使用,當檢查到列表中的“ Bob”值后,然后刪除它,直到條件不再成立為止。
星期四練習
1.移除重復值:從下面的列表中移除全部重復值,輸出結(jié)果應是[‘Bob’, ‘Kenny’, ‘Amanda’]
小提示:使用.count()方法并結(jié)合while循環(huán)。
2.用戶輸入:使用一個while循環(huán)來持持續(xù)要求用戶輸入一個詞語,直到用戶輸入“quit”。一旦用戶輸入一個詞,就將這個詞添加到列表中。一旦他們中止循環(huán),則用for循環(huán)輸出列表中的所有元素。
今天講解的知識點很重要,通過上述講解的內(nèi)容我們才能了解如何使用列表,是否它可以是條件語句或循環(huán)。列表可以結(jié)合很多方法使用; 在本書的其余部分中,我們將更詳細的介紹它們。
