Python 簡易手冊
單元 38 - 序對與 Range
序對 (tuple) 跟 range 都是不可變的 (immutable) 序列 (sequence) ,不可變的序列支援以下操作
操作 | 說明 |
---|---|
x in s | 判斷 x 是否是 s 的元素 |
x not in s | 判斷 x 是否不是 s 的元素 |
s + t | 回傳合併 s 與 t 的新序列 |
s * n n * s | 回傳將 s 複製 n 倍的新序列 |
s[i] | 取得 s 中索引值為 i 的元素 |
s[i:j] | 取得 s 中索引值為 i 到 j - 1 的子序列 |
s[i:j:k] | 取得 s 中索引值為 i 到 j - 1 間隔 k 的子序列 |
len(s) | 回傳 s 中的元素總量 |
min(s) | 回傳 s 中的最小值 |
max(s) | 回傳 s 中的最大值 |
s.index(x[, i[, j]]) | 回傳 s 中 x 的索引值,或是 x 在 i 到 j 之間的索引值 |
s.count(x) | 回傳 x 在 s 中的數量 |
基本上 range 是整數序列,由內建函數 (built-in function) range() 回傳由參數 (parameter) 定義的整數數列,總共最多可以有三個引數 (argument)
操作 | 說明 |
---|---|
range(stop) | 依 stop 建立 range 物件 |
range(start, stop[, step]) | 依 start 、 stop 及 step 建立 range 物件 |
例如
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # 建立 0 到 9 的整數數列 print(tuple(range(10))) # 建立 1 到 10 的整數數列 print(tuple(range(1, 11))) # 建立 0 到 18 間隔 2 的整數數列 print(tuple(range(0, 20, 2))) # 建立 20 到 2 倒數間隔 3 的整數數列 print(tuple(range(20, 0, -3))) # 檔名: range_demo.py # 說明: 《Python簡易手冊》的範例 # 網址: http://kaiching.org # 作者: Kaiching Chang # 時間: 2024 年 3 月 |
以上都是先建立 range 物件,然後用另一個內建函數 tuple() 轉換成序對型態,然後直接當作 print() 的引數印在命令列上
1 2 | # 建立 0 到 9 的整數數列 print(tuple(range(10))) |
簡單說,預設建立的整數數列是從 0 開始,然後是引數指定的個數,所以引數 10 就是從 0 到 9 總共 10 個數字,同樣在第 4 行提供兩個引數
3 4 | # 建立 1 到 10 的整數數列 print(tuple(range(1, 11))) |
第一個引數 1 表示從 1 開始,第二個引數 11 表示總個數 11 減 1 為 10 個,所以這一行會產生從 1 到 10 總共 10 個數字的整數數字。
range() 的數字間隔預設為 1 ,也可以由第三個引數自行設定,例如第 6 行
5 6 | # 建立 0 到 18 間隔 2 的整數數列 print(tuple(range(0, 20, 2))) |
這是從第一個引數 0 開始到第二個引數 20 為止,間隔 2 ,所以是 20 減 0 得到 20 ,再除以 2 得到總共 10 個數字,所以是從 0 開始,整數數列每個數字加 2 ,到第 10 個數字 18 為止。
第三個引數可以是負數,這樣就是倒數的整數數列,例如第 8 行
7 8 | # 建立 20 到 2 倒數間隔 3 的整數數列 print(tuple(range(20, 0, -3))) |
同樣是從第一個引數 20 開始到第二個引數 0 為止,間隔設定為 -3 也就是減 3 ,所以是 20 減 0 得到 20 ,再除以 3 得到組共 7 個數字,所以是從 20 開始,整數數列每個數字減 3 ,到第 7 個數字 2 為止。
此例執行結果如下
> python range_demo.py |
(0, 1, 2, 3, 4, 5, 6, 7, 8, 9) (1, 2, 3, 4, 5, 6, 7, 8, 9, 10) (0, 2, 4, 6, 8, 10, 12, 14, 16, 18) (20, 17, 14, 11, 8, 5, 2) |
> |
以上也可以看到序對的字面常數 (literal) 是小括弧,序對同樣是不可變的序列,序對中的元素可以是任意的資料型態,舉簡單例子如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | # 建立序對變數 t1 = 1, 2, 3, 4, 5 t2 = (1, 2, 3, 4, 5) # 印出變數的資料型態 print(type(t1)) print(type(t2)) # 示範操作 print(6 in t2) print(t1 + t2) print(t1[3]) # 檔名: tuple_demo.py # 說明: 《Python簡易手冊》的範例 # 網址: http://kaiching.org # 作者: Kaiching Chang # 時間: 2024 年 3 月 |
第 2 行及第 3 行都是序對,其實定義序對不加小括弧也可以,只要把元素用逗號分開即可
1 2 3 | # 建立序對變數 t1 = 1, 2, 3, 4, 5 t2 = (1, 2, 3, 4, 5) |
所以程式中用逗號間隔的資料基本上是序對型態,例如函數 (function) 定義在 return 陳述 (statement) 接上以逗號分格的數值,嚴格說,此時函數的回傳值 (return value) 為序對,如何定義函數會在單元 44 - 函數與 return 陳述介紹。
下面印出兩個變數 (variable) 的型態及示範一些操作,執行結果如下
> python tuple_demo.py |
<class 'tuple'> <class 'tuple'> False (1, 2, 3, 4, 5, 1, 2, 3, 4, 5) 4 |
> |
由於序對是不可變的,因此如果處理的資料不需要變動,就可以放到序對中來處理,如果下例由 range() 產生數列後,逐一將每個數列數字放到串列 (list) 中,最後再把串列轉換成序對
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | # 建立數列放到串列中 t1 = [] for i in range(10): t1.append(i) # 將串列轉換成序對 t2 = tuple(t1) # 印出序對 print(t2) # 印出序對的型態名稱 print(type(t2)) # 檔名: tuple_demo2.py # 說明: 《Python簡易手冊》的範例 # 網址: http://kaiching.org # 作者: Kaiching Chang # 時間: 2024 年 3 月 |
單元 39 - 串列會詳細介紹如何定義串列。
此例執行結果如下
> python tuple_demo2.py |
(0, 1, 2, 3, 4, 5, 6, 7, 8, 9) <class 'tuple'> |
> |
內建函數 tuple() 可以將可迭代的 iterable 轉換成序對
操作 | 說明 |
---|---|
tuple([iterable]) | 將 iterable 轉換成序對物件 |
單元 66 - 迭代器會介紹迭代器及如何定義迭代器,也會說明可迭代與迭代器的不同。