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]
未完待續...
沒有留言:
張貼留言