2009年3月4日 星期三

Python 資料型態(上)

Python 有一個特性, 就是變數的宣告不需要使用強型態, 你可以指定 a = 2, 也可以在下一行改變成 a = 'sample', 包括陣列存放都可以使用多種不同型態的變數例如 a = [123, 'abc', 1.23]。

介紹一下 Python 核心物件內含的資料型態

1. Numbers -> 整數(integer), 含小數的數字(floating-point numbers), 另外像是一些長整數(unlimited-precision “long” integers), 複雜的數字(complex numbers)與固定精度的小數(fixed-precision decimals)等...。

範例:

>>> 123 + 456   # 整數相加
579
>>> 1.5 * 4    # 小數運算
6.0
>>> 2 ** 100   # 2的100次方
1267650600228229401496703205376L

另外有一些有趣的功能, 例如把一個高精度的小數用 print 顯示的話, 用戶只會看到部份好辨認的位數

>>> 3.1415 * 2  # 完整精度
6.2830000000000004
>>> print 3.1415 * 2 # 使用者好觀看的數字
6.283

Learning Python (Oreilly 出版) 的作者Mark Lutz說道 if something looks odd, try showing it with a print statement. (如果某樣東西看起來很莫名奇妙, 請嘗試使用print將它顯示出來)

2. Strings -> 字串, 基本上你可以將字串敘述成多個字元組合成的陣列, 譬如 'Spam' 就等於一個 ['S', 'p', 'a', 'm']。

範例:

>>> S = 'Spam'
>>> len(S)   # 字串長度
4
>>> S[0] # 該字串的第一個字元
'S'
>>> S[1]  # The second item from the left
'p'

也可以使用另外一些方式取出字元

>>> S[-1]  # 最後一個字元
'm'
>>> S[len(S)-1]  # 用總長減去一(麻煩的作法)
'm'

如果要取出範圍

>>> S[1:3]  # 取出從第一個到從頭數第三個
'pa'
>>> S[1:]  # 第一個字元以後
'pam'
>>> S[:-1]  # 最後一個字元以前
'Spa'

Python 中字串也可以用乘法運算

>>> S * 8  # 重複顯示8次
'SpamSpamSpamSpamSpamSpamSpamSpam'

字串相加

>>> S + 'xyz'  # 字串合併
'Spamxyz'

另外字串也有一些相關函式

>>> S.find('pa')   # 找尋比對字串出現位置
1
>>> S
'Spam'
>>> S.replace('pa', 'XYZ')   # 取代 'pa' 為 'XYZ', 但請注意原本字串不會被更動
'SXYZm'
>>> S
'Spam'
>>> line = 'aaa,bbb,ccccc,dd'
>>> line.split(',')  # 拆解字串為陣列
['aaa', 'bbb', 'ccccc', 'dd']
>>> S.upper( )  # 轉為大寫
'SPAM'
>>> line = 'aaa,bbb,ccccc,dd\n'
>>> line = line.rstrip( )   # 去除右方空白字元, 如同trim()
>>> line
'aaa,bbb,ccccc,dd'

3. List -> 集合, 不需指定長度並可容納不同型態的物件

>>> L = [123, 'spam', 1.23]
>>> len(L)  # List 長度
3
>>> L + [4, 5, 6]   # 串接List
[123, 'spam', 1.23, 4, 5, 6]
>>> L.append('NI')   # 新增一個元素到最後面
>>> L
[123, 'spam', 1.23, 'NI']
>>> L.pop(2)   # 將L[2]移除並返回值
1.23
>>> L      # "del L[2]" 一樣可以達成刪除目的
[123, 'spam', 'NI']
>>> M = ['bb', 'aa', 'cc']
>>> M.sort( )   # 正向排序(小到大)
>>> M
['aa', 'bb', 'cc']
>>> M.reverse( )  # 反向排序(大到小)
>>> M
['cc', 'bb', 'aa']

巢狀List

>>> M = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> M
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

>>> M[1]
[4, 5, 6]
>>> M[1][2]
6

還有一點蠻有趣的就是在中括號內寫迴圈與條件式, 個人認為能省下很多行程式碼的寫法

>>> col2 = [row[1] for row in M]  # 取出M中每一個元素的第1個元素(0,1,2...)
>>> col2
[2, 5, 8]

>>> [row[1] + 1 for row in M]  # 取出M中每一個元素的第1個元素並加上一
[3, 6, 9]

>>> [row[1] for row in M if row[1] % 2 == 0] # 判斷元素中2的倍數
[2, 8]

未完待續...

沒有留言:

張貼留言