Python筆記三:列表操作

本次筆記主要五個內容:迴圈遍歷列表中的元素;數值列表,列表解析,切片,以及元組

1)遍歷整個列表

經常需要遍歷列表中的元素,比如:小蜜蜂的遊戲裡面,列表裡的小蜜蜂的位置都需要向下移動一格。For迴圈是遍歷列表中元素的好幫手。

#建立一個包含魔術師名單的列表magicians = [‘alice’, ‘david’, ‘arolina’]print(magicians)[‘alice’, ‘david’, ‘arolina’]#結合前面筆記學過的內容,看看下面的程式:>>>for magician in magicians: >>> print(magician。title() + “, that was a great!”)>>> print(“I can‘t wait to see ur next, ” + magician。title() + “。\n”)>>>print(“Thank you, everyone。 That was a great magic show!”)#執行上面的程式,將在螢幕上打印出下面的內容。Alice, that was a great!I can’t wait to see ur next, Alice。David, that was a great!I can‘t wait to see ur next, David。Arolina, that was a great!I can’t wait to see ur next, Arolina。Thank you, everyone。 That was a great magic sh

請注意以下幾點說明:

For 語句後面一定要有冒號,別忘記了哈。

For後面所有縮排一格的語句,都是這個 For 大迴圈下面的,直到再次出現不縮排的語句,For 迴圈才結束。請注意python靠縮排來決定for迴圈以及if語句等的執行

還記得換行符:\n,以及字串的方法title()的作用嘛

再看一下以下一個簡單的例子來更加了解for迴圈:

>>>fruits = [‘apple’, ‘orange’, ‘banana’]>>>print(fruits)[‘apple’, ‘orange’, ‘banana’]>>>for fruit in fruits:>>> print(fruit)appleorangebanana

2)range()函式建立數值列表

請看下面一行程式碼和執行結果:

>>>for value in range(1,5): >>> print(value)1234

函式range()讓Python從你指定的第一個值開始數,並在到達你指定的第二個值後停止,因此輸出不包含第二個值(上面的程式碼中為5)。

現在用range()函式建立數字列表:

>>>numbers = range(1, 5)>>>print(numbers)range(1, 5)>>>print(type(numbers))>>>print(list(numbers))[1, 2, 3, 4]#單獨使用range()函式,不產生列表,只產生一個迭代器#需要使用list()函式將其轉換成列表型別#結For迴圈,下面range()函式中的2代表步長,表示從1開始,不斷加2,直到小於11>>>squares = [] >>>for value in range(1,11,2): >>> square = value ** 2 >>> squares。append(square) >>>print(squares)[1, 9, 25, 49, 81

對數字列表執行簡單的統計計算

>>>digits = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]>>>min(digits)0 >>>max(digits)9 >>>sum(digits)45

3)列表解析

上面介紹的生成列表squares的方式包含三四行程式碼,而列表解析讓你只需編寫一行程式碼就能生成這樣的列表。列表解析將for迴圈和建立新元素的程式碼合併成一行,並自動附加新元素。

>>>squares = [value ** 2 for value in range(1,11,2)] >>>print(squares)>>>[1, 9, 25, 49, 81]

列表解析的基本語法為:[表示式 for 元素 in 可迭代物件 if 條件]

使用中括號[]建立一個列表

表示式的返回值會放入這個建立的列表中

內部是for迴圈

if條件語句可選,如果有if語句,必須是if的條件判斷成功,才會執行表示式

將每次for迴圈執行表示式後的返回值,依次放入建立的列表中,for迴圈迭代多少次就把多少個返回值放入列表中,最後返回一個新的列表

一般使用列表解析式可以完成列表的初始化

能用列表解析式就儘量用列表解析式,非常常用

下面看一個簡單的例子:

有一個列表lst = [1,4,9,16,2,5,10,15],生成一個新列表,要求新列表元素是lst相鄰2項的和。

>>>lst = [1,4,9,16,2,5,10,15]>>>new_lst = [ lst[i] + lst[i+1] for i in range(len(lst)-1)]>>>print(new_lst)[5, 13, 25, 18, 7, 15, 25]

4)切片

我們已經學習瞭如何訪問列表中的單個元素(利用索引),也瞭解瞭如何使用遍歷列表中的所有元素,下面我們看看如何訪問列表中的一部分元素。

一個完整的切片表示式包含兩個“:”,用於分隔三個引數(start_index、end_index、step)。當只有一個“:”時,預設第三個引數step=1;當一個“:”也沒有時,start_index=end_index,表示切取start_index指定的那個元素。

step:正負數均可,其絕對值大小決定了切取資料時的‘‘步長”,而正負號決定了“切取方向”,正表示“從左往右”取值,負表示“從右往左”取值。當step省略時,預設為1,即從左往右以步長1取值。“切取方向非常重要!”“切取方向非常重要!”“切取方向非常重要!”,重要的事情說三遍!

start_index:表示起始索引(包含該索引對應值);該引數省略時,表示從物件“端點”開始取值,至於是從“起點”還是從“終點”開始,則由step引數的正負決定,step為正從“起點”開始,為負從“終點”開始。

end_index:表示終止索引(不包含該索引對應值);該引數省略時,表示一直取到資料“端點”,至於是到“起點”還是到“終點”,同樣由step引數的正負決定,step為正時直到“終點”,為負時直到“起點”。

#生成一個運動隊成員列表>>>players = [‘charles’, ‘martina’, ‘michael’, ‘florence’, ‘eli’]#列印前三名隊員的名字>>>print(players[0:3]) [‘charles’, ‘martina’, ‘michael’]#列印第一三五名隊員名字>>>print(players[0:5:2])>>>print(players[0::2])[‘charles’, ‘michael’, ‘eli’]#切取完整物件>>>print(players[:])>>>print(players[::]) #上面兩個意思一樣,從左到右複製整個物件>>>print(players[::-1]) #從右到左複製整個物件[‘charles’, ‘martina’, ‘michael’, ‘florence’, ‘eli’]#輸出為空列表#step=-1,決定了從右往左取值,而start_index=1到end_index=4決定了從左往右取值,兩者矛盾,所以為空。>>>print(players[1:4:-1])[]#輸出為空列表#step=1,決定了從左往右取值,而start_index=4到end_index=2決定了從右往左取值,兩者矛盾,所以為空。>>>print(players[4:2:])[]#step=1,表示從左往右取值,而start_index省略時,表示從端點開始,因此這裡的端點是“起點”,即從“起點”值0開始一直取到end_index=4(該點不包括)。>>>print(players[:4])[‘charles’, ‘martina’, ‘michael’, ‘florence’]#step=1,從左往右取值,從start_index=4開始,一直取到“終點”值9。>>>print(players[4:])[‘eli’, ‘matt’, ‘Cheng’, ‘Mattew’]#step=-1,從右往左取值,而start_index省略時,表示從端點開始,因此這裡的端點是“終點”,即從“終點”值8開始一直取到end_index=4(該點不包括)。>>>print(players[:4:-1])[‘Mattew’, ‘Cheng’, ‘matt’]#step=-1,從右往左取值,從start_index=4開始,一直取到“起點”0。>>>print(players[4::-1])[‘eli’, ‘florence’, ‘michael’, ‘martina’, ‘c

5)元組

列表非常適合用於儲存在程式執行期間可能變化的資料集。列表是可以修改的,這對處理網站的使用者列表或遊戲中的角色列表至關重要。然而,有時候你需要建立一系列不可修改的元素,元組可以滿足這種需求。Python將不能修改的值稱為不可變的,而不可變的列表被稱為元組。

元組看起來猶如列表,但使用圓括號而不是方括號來標識。定義元組後,就可以使用索引來訪問其元素,就像訪問列表元素一樣。

#建立一個元組>>>dimensions = (200, 100)>>>print(dimensions[0])200>>>print(dimensions[1])100#下面來嘗試修改元組dimensions中的一個元素,看看結果如何>>>dimensions[0] = 50TypeError: ’tuple‘ object does not support item assignment#可以看到,系統報錯說與元組的元素不支援修改#修改元組變數#雖然不能修改元組的元素,但可以給儲存元組的變數賦值。>>>print(“Original dimensions:”)>>>for dimension in dimensions:>>> print(dimension)>>>dimensions = (400, 100)>>>print(“\nModified dimensions:”)>>>for dimension in dimensions:>>> print(dimension)#介面輸出結果如下:Original dimensions:20050Modified dimensions:400

6)小結

以上,我們彙總了:如何高效地處理列表中的元素;如何使用for迴圈遍歷列表,Python如何根據縮排來確定程式的結構以及如何避免一些常見的縮排錯誤;如何建立簡單的數字列表,以及可對數字列表執行的一些操作;如何透過切片來使用列表的一部分和複製列表。以及元組(它對不應變化的值提供了一定程度的保護)的基本知識。