Preface
想想你平時撰寫的一些應用程式,大部份是在處理一組資料,Python 對管理資料用的容器(Container)型態,在語法上提供直接支援,加上 for 包含式(comprehension)的支援,在資料處理問題上可獲得不少的便利性。Python 支援的容器型態有 list、set、dict、tuple 等。
list 型態
list 是有序且可變群集(Collection),在 Python 中,[1, 2, 3] 這樣的語法,即可建立含元素 1、2、3 而索引 0、1、2 的 list 實例。
list 與先前介紹過的 string 享有共同的操作。len 傳回 list 長度;in 可測試某元素是否在 list 中;+ 可以用來串接兩個 list;* 可用來複製出指定數量的 list。[] 可以指定索引,用以從 list 中取得元素,負索引是從最後一個元素計數,使用 [] 來切割 list 或許是最有用的功能。其他操作還有…
set 型態
set 型態是無序群集,管理的元素不會重複而且必須(Immutable)是 hashable(這中間還有一些要討論的東西,可以參考 物件相等性(上))。以下是 set 的幾個功能示範:
dict 型態
鍵(Key)值(Value)對應的物件,鍵物件必須是 hashable。以下是一些操作示範:
使用 [] 時如果指定的鍵不存在,會發生 KeyError,可以使用 dict 的 get 方法,指定鍵不存在時傳回的預設值。例如:
tuple 型態
tuple 型態作用類似 list,不過 tuple 實例是不可變(Immutable),也就是一旦建立,無法對其增減元素。除了增減元素個數之外,tuple 與 list 操作上類似,事實上,循序結構的物件(像是字串、list、tuple 等),在 Python 中共享某些操作方式。管理物件時該使用可變物件還是不可變物件?不可變物件在某些情況下,會擁有較好的效能,之後還會談到更多有關不可變物件的好處。
練習 3:Python 互動模式與直譯器指令
開啟一個終端機,鍵入 python 指令進入互動模式,接著鍵入以下指令,你會看到什麼?
離開互動模式後,直接鍵入以下指令會看到什麼?
-h 引數會顯示使用說明,-c 會直譯後續給定的字串文字,因此 python -c 'help(len)' 就是顯示 len 函式的說明,import this 會顯示一段文件,代表 Python 的哲學,也是發展的規範:
if、for 與 while
流程語法中最簡單的 if..else 分支判斷,在 Python 中是這樣寫的:
- from sys import argv
- if len(argv) > 1:
- print 'Hello, ' + argv[1]
- else:
- print 'Hello, Guest'
- from sys import argv
- print 'Hello, ' + (argv[1] if len(argv) > 1 else 'Guest')
- numbers = [10, 20, 30]
- squares = []
- for number in numbers:
- squares.append(number ** 2)
- print squares
- print 'Enter two numbers...'
- m = int(raw_input('Number 1: '))
- n = int(raw_input('Number 2: '))
- while n != 0:
- r = m % n
- m = n
- n = r
- print 'GCD: {0}'.format(m)
- numbers = [10, 20, 30]
- squares = []
- for number in numbers:
- squares.append(number ** 2)
- print squares
- numbers = [10, 20, 30]
- print [number ** 2 for number in numbers]
- numbers = [11, 2, 45, 1, 6, 3, 7, 8, 9]
- odd_numbers = []
- for number in numbers:
- if number % 2 != 0:
- odd_numbers.append(number)
- print odd_numbers
- numbers = [11, 2, 45, 1, 6, 3, 7, 8, 9]
- print [number for number in numbers if number % 2 != 0]
- lts = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
- print [ele for lt in lts for ele in lt]
也可以建立 dict 實例。例如:
上例中的 zip 函式,就如名稱意義,會將兩個 list 像拉鏈一樣,兩兩相扣在一起為 tuple,這些 tuple 元素組成一個新的 list,對於 tuple 元素組成的這個 list,每個 tuple 中的一對元素再指定給name 與 age,最後這對 name 與 age 組成 dict 的一對鍵值。
練習 4:使用 for 包含式
在 LAB 檔案中,有個 exercises\exercise4\exercise4-1.py,內容如下:
- numbers = []
- for number in range(20):
- numbers.append(str(number))
- print ", ".join(numbers)
Note.
Supplement
* [Quick Python] 8. Control flow
* [Quick Python] 5. Lists, tuples, and sets - Part 1
* [Quick Python] 5. Lists, tuples, and sets - Part 2
沒有留言:
張貼留言