Python編程思想(6):列表和元組的基礎知識

《Python編程思想》總目錄

目錄

1. 序列

2. 創建列表和元組

3. 通過索引訪問元素

4. 分片與子序列

5. 加法

6. 乘法

7.  in 運算符

8.  長度、最大值和最小值


列表(list)、 元組(tuple) 和字典(dict)是Python中非常常用的三種集合類型數據結構,這三種數據結構都可用於保存多個數據項,這對於編程而言是非常重要的。這是因爲程序不僅需要使用單個變量來保存數據,還需要使用多種數據結構來保存大量數據,而列表、元組和字典就可滿足保存大量數據的需求。

列表和元組的功能類似,它們都按順序保存元素,每個元素都有自己的索引,因此列表和元組都可通過索引訪問元素。二者的區別在於元組是不可修改的,但列表是可修改的。字典則以key-value的形式保存數據。這三種數據結構各有特色,它們都是Python編程中必不可少的內容。

本文主要介紹列表和元組的使用方法,在下一篇文章中,會詳細介紹字典的使用方法。

1. 序列

在深入講解列表和字典之前,先講一下序列。

所謂序列,指的是一種包含多項數據的數據結構,序列包含的多個數據項按順序排列,可通過索引來訪問成員。

Python語言中常見序列包括字符串、列表和元組等。在前文中介紹過的字符串,其實就是一種常見的序列,可以通過索引訪問字符串中的任意字符。

本文再介紹兩種序列,這就是列表和元組,這兩種類型看起來非常相似,它們最主要的區別在於:元組是隻讀的,也就是說,元組一旦初始化完,其中的所有元素都是不可更改的(不可增加、刪除和修改元素的值),其實這種特性與字符串類似,字符串中的每一個字符,只能通過索引讀取,不能修改,也不能刪除;但列表是可變的,程序可以修改列表中所包含的元素。

在實際的應用場景中,如果只是需要保存和檢索數據,並不需要修改它們,此時就應該使用元組;反之,就應該使用列表。此外,在某些時候,程序需要使用不可變的對象,比如Python要求字典的key必須是不可變的,此時程序就只能使用元組了。

2. 創建列表和元組

創建列表和元組的語法類似,區別只是創建列表時使用一對方括號,創建元組時使用一對圓括號,並在括號中指定元組中的元素,如果有多個元素,中間用逗號分隔。

創建列表的語法格式如下:

[element1, element2, element3,...,elementn]

創建元組的語法格式如下:

(element1, element2, element3,...,elementn)

下面代碼演示瞭如何在程序中創建列表和元組:

# 使用方括號定義列表
my_list = ['Python', 100, 'Java']
print(my_list)
# 使用圓括號定義元組
my_tuple = ('Python', 100, 'Java')
print(my_tuple)

輸出結果如下圖所示:

3. 通過索引訪問元素

列表和元組都可通過索引來訪問元素,它們的索引都是從0開始的,第1個元素的索引爲0,第2個元素的索引爲1...,依此類推。它們也支持將負數作爲索引,倒數第1個元素的索引爲-1,倒數第2個元素的索引爲-2...,依此類推。

列表的元素可以單獨進行處理,可以像一個變量一樣,既可使用它的值,也可對元素賦值。元組的元素則相當於一個常量,程序只能使用它的值,不能對它重新賦值。本節只介紹訪問元素的基本方法,更高級的用法會在後面詳細介紹。

如下代碼示範了使用列表和元組的元素。

源代碼文件:使用索引的基本方法.py

my_tuple = ('I', 123, True, 'love', 'Python',12.54)
print(my_tuple)
# 訪問第1個元素
print(my_tuple[0])      # I
# 訪問第2個元素
print(my_tuple[1])      #  123
# 訪問倒數第1個元素
print(my_tuple[-1])     # 12.54
# 訪問倒數第3個元素
print(my_tuple[-3])     # love

顯示效果如下圖所示:

4. 分片與子序列

與字符串類似,列表和元組同樣也可使用索引獲取一段子列表,這種用法被稱爲切片,英文稱爲slice。切片 的完整語法格式如下:

[start:end:step]

上面語法中start和end 兩個索引值都可使用正數或負數,其中正數表示從開始往後數,負數表示從結尾開始往前數。該語法表示從start索引的元素開始(包含),到end索引的元素結束(不包含)的所有元素。step表示步長,因此step使用負數沒有意義,但step仍然可以是負數。效果與字符串一樣,將列表或元組中的元素倒序。

下面的代碼演示了切片的完整用法:

my_tuple = ('公衆號', 123, 543.12, '極客起源', 'Python','編程思想')
# 訪問從第2、3個元素
print(my_tuple[1: 3])   # (123, 543.12)
# 訪問第1個,第4個元素
print(my_tuple[0::3])  # ('公衆號', '極客起源')
# 訪問最後兩個元素
print(my_tuple[-2:])    # ('Python', '編程思想')
# 訪問倒數第3個到第5個
print(my_tuple[-4: -1]) # (543.12, '極客起源', 'Python')


my_tuple = (1, 2, 3, 4, 5, 6, 7, 8, 9)
# 訪問從第4個到第9個(不包含)、間隔爲2的所有元素
print(my_tuple[3: 8: 2]) # (4, 6, 8)
# 訪問從第3個到第9個(不包含)、間隔爲3的所有元素
print(my_tuple[2: 8: 3]) # (3, 6)
# 訪問從第3個到倒數第2個(不包含)、間隔爲3的所有元素
print(my_tuple[2: -2: 2]) # (3, 5, 7)

5. 加法

列表和元組支持加法運算,加法的和就是兩個列表或元組所包含的元素首尾相接。需要注意的是,列表只能和列表相加;元組只能和元組相加;元組不能直接和列表相加。下面的代碼演示了列表和元組的加法運算。​​​​​​​

a_tuple = ('Python' , 20, -10.2)
b_tuple = (127, 'Java', 'Test', True)
# 計算元組相加
sum_tuple = a_tuple + b_tuple
print(sum_tuple)    #  ('Python', 20, -10.2, 127, 'Java', 'Test', True)
print(a_tuple)      # a_tuple並沒有改變
print(b_tuple)      # b_tuple並沒有改變
# 兩個元組相加
print(a_tuple + (-220 , -130))      # ('Python', 20, -10.2, -220, -130)
# 下面代碼報錯:元組和列表不能直接相加
#print(a_tuple + [-20 , -30])
a_list = [204, 301, 150, 100]
b_list = ['a', 'b', 'c']
# 計算列表相加
sum_list = a_list + b_list
print(sum_list) # [204, 301, 150, 100, 'a', 'b', 'c']
print(a_list + ['Ruby']) # [204, 301, 150, 100, 'Ruby']

運行結果如下圖所示:

6. 乘法

列表和元組可以和整數執行乘法運算,列表和元組乘法的作用就是把列表或元組中的元素重複N次,並且首尾相接。

下面的代碼演示了列表和元組的乘法。

源代碼:乘法.py

a_tuple = ('Python編程思想' , 20)
# 執行乘法
mul_tuple = a_tuple * 3
# ('Python編程思想', 20, 'Python編程思想', 20, 'Python編程思想', 20)
print(mul_tuple)
a_list = [12, '公衆號:極客起源', 4]
mul_list = a_list * 2
# [12, '公衆號:極客起源', 4, 12, '公衆號:極客起源', 4]
print(mul_list)

程序運行結果如下圖所示:

7.  in 運算符

in運算符用於判斷列表或元組是否包含某個元素,例子代碼如下:

源代碼:in運算符.py

a_tuple = ('Python' , 20, -11.5) 
print(20 in a_tuple) # True
print(1.2 in a_tuple) # False
print('Python' not in a_tuple) # False

​​​​​​​8.  長度、最大值和最小值

Python提供了內建的len()、max()和min()函數來獲取元組或列表的長度、最大值和最小值。由於max()和min()函數要對元組、列表中的元素值比較大小,因此程序要求傳給max()和min()函 數的元組、列表的元素必須是相同類型且可以比較大小。

例子代碼:長度、最大值和最小值.py

# 元素都是數值的元組
a_tuple = (13, 40, -12, 15.2, 152, 10)
# 計算最大值
print(max(a_tuple)) # 152
# 計算最小值
print(min(a_tuple)) # -12
# 計算長度
print(len(a_tuple)) # 6
# 元素都是字符串的列表
b_list = ['Python', 'Java', 'Ruby', 'Swift']
# 計算最大值(依次比較每個字符的ASCII碼值,先比較第1個字符,若相同,繼續比較第2個字符,以此類推)
print(max(b_list)) # Swift
# 計算最小值
print(min(b_list)) # Java 
# 計算長度
print(len(b_list)) # 4

在上面代碼中,首先使用3個函數對元素都是數值的元組進行處理,可以看到程序獲取元組的最大值、最小值和長度。程序後半部分使用3個函數對元素都是字符串的列表進行處理,也可以看到程序獲取列表的最大值、最小值和長度,這說明Python的字符串也是可比較大小,比較的規則是Python 依次按字符串中每個字符對應的編碼來比較字符串的大小。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章