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

3.3 列表與元組

列表是Python中內置的可變序列,由一系列按特定順序排列的元素組成。列表的所有元素都放在一對中括號“[ ]”中,相鄰元素間使用英文逗號“,”分隔。整數、實數、字符串、列表、元組等任何類型的內容都可以放入列表中,且同一個列表中元素的類型可以不同,因為它們之間沒有任何關系。由此可見,Python中的列表是非常靈活的,這一點與其他語言是不同的。

3.3.1 列表的創建

在Python中提供了多種創建列表的方法,下面分別進行介紹。

1.使用賦值運算符直接創建列表

創建列表時,也可以使用賦值運算符“=”直接將一個列表賦值給變量。語法格式如下:

listname = [element 1,element 2,…,element n]

參數說明:

 listname:列表名稱,可以是任何符合Python命名規則的標識符。

 elemnet 1,elemnet 2,…,elemnet n:列表中的元素,個數沒有限制,只要是Python支持的數據類型就可以。

例如,下面定義的都是合法的列表。

01  num = [7,14,21,28,35,42,49,56,63]
02  verse = ["自古逢秋悲寂寥","我言秋日勝春朝","晴空一鶴排云上","便引詩情到碧霄"]
03  untitle = ['Python',28,"人生苦短,我用Python",["爬蟲","自動化運維","云計算","Web開發"]]
04  python = ['優雅',"明確",'''簡單''']

說明

雖然可以將不同類型的數據放在同一個列表中,但通常情況下不這樣做。建議大家一個列表只放入一種類型的數據,這樣可以提高程序的可讀性。

2.創建空列表

在Python中可以創建空列表。例如,創建一個名稱為emptylist的空列表,代碼如下:

emptylist = []
3.創建數值列表

數值列表很常見,創建數值列表需要使用list()函數。例如,在考試系統中記錄學生的成績,或者在游戲中記錄每個角色的位置、各個玩家的得分等,都可以應用數值列表來保存對應的數據。

list()函數的基本語法格式如下:

list(data)

其中,data是可以轉換為列表的數據,類型可以是range對象、字符串、元組或其他可迭代類型。

例如,創建一個10~20(不包括20)范圍所有偶數的列表,可以使用下面的代碼:

list(range(10, 20, 2))  #10~20(不包括20)范圍所有偶數的列表

運行上面的代碼后,將得到下面的列表:

[10, 12, 14, 16, 18]

說明

使用list()函數不僅能通過range對象創建列表,還可以通過其他對象創建列表。

3.3.2 檢測列表元素

在Python中,可以直接使用print()函數輸出列表的內容。例如,要打印上面創建的untitle列表,可以使用下面的代碼:

print(untitle)

運行結果如下:

['Python', 28, '人生苦短,我用Python', ['爬蟲', '自動化運維', '云計算', 'Web開發', '游戲']]

可以看出,輸出列表時會包括左右兩側的中括號。如果不想輸出全部元素,可通過列表索引獲取指定的元素。例如,要獲取列表untitle中索引為2的元素,可以使用下面的代碼:

print(untitle[2])

運行結果如下:

人生苦短,我用Python

從上面的運行結果中可以看出,輸出單個列表元素時,不包括中括號;如果是字符串,不包括左右的引號。

3.3.3 列表的截取—切片

列表的截取就是切片操作,它可以訪問一定范圍內的元素,并通過切片操作生成一個新的序列。實現切片操作的語法格式如下:

sname[start : end : step]

參數說明:

 sname:序列的名稱。

 start:切片的開始位置(包括該位置)。如果不指定,則默認為0。

 end:切片的截止位置(不包括該位置)。如果不指定,則默認為序列的長度。

 step:切片的步長。如果省略,則默認為1。當省略該步長時,最后一個冒號也要省略。

說明

進行切片操作時,如果指定了步長,將按照該步長遍歷序列中的元素,否則將逐個元素地遍歷序列。

例如,通過切片獲取熱門綜藝名稱列表中的第2~5個元素,以及獲取第1個、第3個和第5個元素,可以使用下面的代碼。

運行上面的代碼,將輸出以下內容:

['歌手', '中國好聲音', '巧手神探', '歡樂喜劇人']
['向往的生活', '中國好聲音', '歡樂喜劇人']

說明

要想復制整個序列,可以將start和end參數都省略,但中間的冒號需要保留。例如,verse[:]表示復制verse列表中的整個序列。

3.3.4 列表的拼接

在Python中,支持兩種相同類型列表的相加操作。這里,“相加”的含義是將兩個列表拼接起來,使用加號運算符“+”來實現。例如,將兩個列表相加,可以使用下面的代碼。

運行上面的代碼,將輸出以下內容:

['快樂大本營', '天天向上', '中餐廳', '跨界喜劇王', '向往的生活', '歌手', '中國好聲音', '巧手神探', '歡樂喜劇人', '笑傲
江湖', '奔跑吧', '王牌對王牌', '吐槽大會', '奇葩說']

從輸出結果可以看出,兩個列表被合并為一個列表了。

說明

進行序列相加時,相同類型的序列是指同為列表、元組、集合等,序列中的元素類型可以不同。例如,下面的代碼也是正確的:

    01  num = [7,14,21,28,35,42,49,56]
    02  art = ["快樂大本營","天天向上","中餐廳","跨界喜劇王"]
    03  print(num + art)

相加后的結果如下:

    [7, 14, 21, 28, 35, 42, 49, 56, '快樂大本營', '天天向上', '中餐廳', '跨界喜劇王']

但不能是列表和元組相加,或者列表和字符串相加。例如,下面的代碼就是錯誤的:

    01  num = [7,14,21,28,35,42,49,56,63]
    02  print(num + "輸出是7的倍數的數")

上面的代碼運行后將產生如圖3.42所示的異常信息。

圖3.42 將列表和字符串相加產生的異常信息

3.3.5 遍歷列表

有時候,我們需要遍歷列表中的所有元素,以實現查詢、修改、刪除等功能。在Python中遍歷列表的方法有多種,下面介紹兩種常用的方法。

1.使用for循環遍歷列表

直接使用for循環遍歷列表,并輸出元素的值,語法格式如下:

參數說明:

 item:用于保存獲取到的元素值。輸出元素內容時,直接輸出該變量即可。

 listname:列表的名稱。

【實例3.16】 輸出熱門綜藝的名稱。(實例位置:資源包\Code\03\16)

定義一個保存熱門綜藝名稱的列表,然后通過for循環遍歷該列表,并輸出各綜藝的名稱。具體代碼如下:

運行上面的代碼,結果如圖3.43所示。

2.使用for循環和enumerate()函數遍歷列表

使用for循環和enumerate()函數遍歷列表,可以同時輸出索引值和對應的元素內容。語法格式如下:

for index,item in enumerate(listname):     #遍歷列表listname的每一項
   print(index,item)                       #輸出index和item

參數說明:

 index:用于保存元素的索引。

 item:用于保存獲取到的元素值。輸出元素內容時,直接輸出該變量即可。

 listname:列表的名稱。

例如,定義一個保存熱門綜藝名稱的列表,然后通過for循環和enumerate()函數遍歷該列表,并輸出索引和綜藝名稱,代碼如下:

執行上面的代碼,將顯示下面的結果。

熱門綜藝名稱:
1 向往的生活
2 歌手
3 中國好聲音
4 巧手神探
5 歡樂喜劇人
6 笑傲江湖
7 奔跑吧
8 王牌對王牌
9 吐槽大會
10 奇葩說

如果想實現分兩列(兩個綜藝一行)輸出熱門綜藝名稱,請看下面的實例。

【實例3.17】 分兩列輸出熱門綜藝名稱。(實例位置:資源包\Code\03\17)

創建一個文件,在該文件中先輸出標題,然后定義一個列表(保存綜藝名稱),再應用for循環和enumerate()函數遍歷列表,在循環體中通過if…else語句判斷是否為偶數,如果為偶數則不換行輸出,否則換行輸出。具體代碼如下:

說明

上面的代碼中,print()函數中使用“, end=''”表示不換行輸出,即下一條print()函數的輸出內容會和這條內容在同一行輸出。

運行結果如圖3.44所示。

圖3.43 通過for循環遍歷列表

圖3.44 分兩列顯示熱門綜藝名稱

3.3.6 列表排序

在實際開發時,經常需要對列表進行排序。Python中提供了兩種常用的列表排序方法,下面分別進行介紹。

1.使用列表對象的sort()方法排序

使用列表對象的sort()方法,可對列表中的元素進行排序。排序后,原列表中的元素順序將發生改變。sort()方法的語法格式如下:

listname.sort(key=None, reverse=False)

參數說明:

 listname:要進行排序的列表。

 key:在指定列表中選擇一個用于比較的鍵。如果設置“key=str.lower”,表示在排序時不區分字母大小寫。

 reverse:可選參數。其值為True,表示降序排列;為False,則表示升序排列。默認為升序排列。

例如,定義一個保存10名學生語文成績的列表,然后應用sort()方法對其進行排序,代碼如下:

執行上面的代碼,將顯示以下內容。

原列表: [98, 99, 97, 100, 100, 96, 94, 89, 95, 100]
升  序: [89, 94, 95, 96, 97, 98, 99, 100, 100, 100]
降  序: [100, 100, 100, 99, 98, 97, 96, 95, 94, 89]

使用sort()方法對數值列表進行排序比較簡單,但在對字符串列表進行排序時,采用的規則是先對大寫字母進行排序,然后再對小寫字母進行排序。如果不需要區分大小寫字母,需要指定參數key。例如,定義一個保存英文字符串的列表,然后應用sort()方法對其進行升序排列,可以使用下面的代碼。

運行上面的代碼,將顯示以下內容。

區分字母大小寫: ['Angela', 'Tom', 'cat', 'pet']
不區分字母大小寫: ['Angela', 'cat', 'pet', 'Tom']

說明

sort()排序方法對于中文的支持不夠友好,排序的結果與我們常用的按拼音或者按筆畫排序都不一致。如果需要對中文內容的列表排序,還需要重新編寫排序方法,不能直接使用sort()方法。

2.使用內置的sorted()函數排序

使用內置的sorted()函數,也可以對列表進行排序。storted()函數的語法格式如下:

sorted(iterable, key=None, reverse=False)

參數說明:

 iterable:要進行排序的列表名稱。

 key:在指定列表中選擇一個用于比較的鍵。如果設置“key=str.lower”,表示在排序時不區分字母大小寫。

 reverse:可選參數。其值為True,表示降序排列;為False,則表示升序排列。默認為升序排列。

例如,定義一個保存10名學生語文成績的列表,然后應用sorted()函數對其進行排序,代碼如下:

執行上面的代碼,將顯示以下內容。

升序: [89, 94, 95, 96, 97, 98, 99, 100, 100, 100]
降序: [100, 100, 100, 99, 98, 97, 96, 95, 94, 89]
原序列: [98, 99, 97, 100, 100, 96, 94, 89, 95, 100]

說明

列表對象的sort()方法和內置sorted()函數的作用基本相同,不同的是:使用sort()方法時,會改變原列表的元素排列順序;使用storted()函數時,會建立一個原列表的副本,該副本為排序后的列表。

3.3.7 元組

元組(tuple)是Python中另一個重要的序列結構。與列表類似,元組也由一系列按特定順序排列的元素組成,但卻是不可變序列。因此,元組也可以稱為不可變的列表。

形式上,元組的所有元素都放在一對小括號“()”中,相鄰元素間使用英文逗號“,”分隔。內容上,可以將整數、實數、字符串、列表、元組等任何類型的內容放入元組中,且同一個元組中元素的類型可以不同。通常情況下,元組用于保存程序中不可修改的內容。

1.元組的創建

在Python中提供了多種創建元組的方法,下面分別進行介紹。

1)使用賦值運算符直接創建元組

創建元組時,可以使用賦值運算符“=”直接將一個元組賦值給變量。語法格式如下:

tuplename = (element 1,element 2,…,element n)

參數說明:

 tuplename:元組的名稱,可以是任何符合Python命名規則的標識符。

 elemnet 1,elemnet 2,…,elemnet n:元組中的元素,個數沒有限制,只要是Python支持的數據類型就可以。

說明

元組的創建格式與列表類似,只是創建列表使用的是中括號“[]”,而創建元組使用的是小括號“()”。

例如,下面定義的都是合法的元組。

num = (7,14,21,28,35,42,49,56,63)
ukguzheng = ("漁舟唱晚","高山流水","出水蓮","漢宮秋月")
untitle = ('Python',28,("人生苦短","我用Python"),["爬蟲","自動化運維","云計算","Web開發"])
python = ('優雅',"明確",'''簡單''')

在Python中,雖然元組的標準格式是使用一對小括號將所有的元素括起來,但是實際上,小括號并不是必須的。只要將一組值用逗號分隔開來,就可以認為它是元組。例如,下面的代碼定義的也是元組。

ukguzheng = "漁舟唱晚","高山流水","出水蓮","漢宮秋月"

在IDLE中輸出該元組后,將顯示以下內容。

('漁舟唱晚', '高山流水', '出水蓮', '漢宮秋月')

如果要創建的元組中只包括一個元素,則需要在定義元組時在元素的后面加一個逗號“,”。例如,下面的代碼定義的就是包括一個元素的元組。

verse = ("一片冰心在玉壺",)

在IDLE中輸出verse,將顯示以下內容:

('一片冰心在玉壺',)

而下面的代碼,則表示定義一個字符串:

verse = ("一片冰心在玉壺")

在IDLE中輸出verse,將顯示以下內容:

一片冰心在玉壺

說明

在Python中,可以使用type()函數測試變量的類型。例如,有下面的代碼:

    01  verse1 = ("一片冰心在玉壺",)
    02  print("verse1的類型為",type(verse1))
    03  verse2 = ("一片冰心在玉壺")
    04  print("verse2的類型為",type(verse2))

在IDLE中執行上面的代碼,將顯示以下內容。

    verse1的類型為 <class 'tuple'>
    verse2的類型為 <class 'str'>

2)創建空元組

在Python中,也可以創建空元組,例如,要創建一個名稱為emptytuple的空元組,代碼如下:

emptytuple = ()

空元組可以應用在為函數傳遞一個空值或者返回空值時。例如,定義一個函數必須傳遞一個元組類型的值,而我們還不想為它傳遞一組數據,就可以創建一個空元組并傳遞給它。

3)創建數值元組

可以使用tuple()函數將一組數據轉換為元組,基本語法如下:

tuple(data)

其中,data表示可以轉換為元組的數據,其類型可以是range對象、字符串、元組或者其他可迭代類型的數據。

例如,創建一個10~20(不包括20)范圍所有偶數的元組,可以使用下面的代碼:

tuple(range(10, 20, 2))

運行上面的代碼后,將得到下面的元組:

(10, 12, 14, 16, 18)

說明

使用tuple()函數不僅能通過range對象創建元組,還可以通過其他對象創建元組。

2.訪問元組元素

在Python中,可以直接使用print()函數輸出元組的內容。例如,要想打印前面創建的untitle元組,可以使用下面的代碼:

print(untitle)

執行結果如下:

('Python', 28, ('人生苦短', '我用Python'), ['爬蟲', '自動化運維', '云計算', 'Web開發'])

從執行結果可以看出,輸出元組時包括左右兩側的小括號。如果不想輸出全部的元素,可通過元組索引來獲取指定的元素。例如,要獲取元組untitle中索引為0的元素,可以使用下面的代碼:

print(untitle[0])

執行結果如下:

Python

從執行結果可以看出,輸出單個元組元素時不包括小括號;如果是字符串,不包括左右的引號。

另外,對于元組也可以采用切片方式獲取指定的元素。例如,要訪問元組untitle中前3個元素,可以使用下面的代碼:

print(untitle[:3])

執行結果如下:

('Python', 28, ('人生苦短', '我用Python'))

同列表一樣,元組也可以使用for循環進行遍歷,方法不再贅述。

主站蜘蛛池模板: 洞头县| 通河县| 修文县| 景洪市| 玛沁县| 横山县| 丰顺县| 漳平市| 勐海县| 万年县| 隆昌县| 安图县| 册亨县| 邢台县| 京山县| 且末县| 永城市| 永昌县| 温州市| 阳山县| 蛟河市| 鄂州市| 岳池县| 曲松县| 班玛县| 资中县| 景泰县| 普陀区| 上林县| 平舆县| 秭归县| 平乐县| 佛冈县| 桐柏县| 永丰县| 大丰市| 阿拉善右旗| 柳江县| 阳春市| 吕梁市| 内黄县|