原出處:

  1. Python Tutorial 第二堂(1)數值與字串型態 這裏我省略以及懂了的部分。
  2. Python Tutorial 第二堂(2)容器、流程、for 包含式

可以使用 [] 指定索引來取得字串中的某個字元,索引從 0 開始,可以是正數或負數,負數表示從尾端開始計數,例如 -1 就是最後一個字元, -2 就是倒數第二個字元,依此類推。
[] 也可以用來切割字串;還可以指定間距(Gap),例如取索引 0 至 6,每 2 個間距的方式取子字串:

>>> lang[0:6:2]
'Pto'

'Python' 的 'P' 至 'y' 算一個間距,'y' 與 't' 之間也是一個間距,依此類推 'Python'[0:6:2] 取得的就是 'Pto',將以上對 [] 的運算方式組合在一起,可以得到一個有趣的反轉字串方式 [::-1]:

>>> lang[::-1]
'nohtyP'

如果要進行字串格式化,以下是舊式寫法:

>>> '%d %.2f %s' % (1, 99.3, 'Justin')
'1 99.30 Justin'
>>> '%(real)s is %(nick)s' % {'real' : 'Justin', 'nick' : 'caterpillar'}
'Justin is caterpillar'
>>>

技術上來說,字串物件將 % 定義為格式化操作,可以接受 tuple 與 dict 型態,不過這種寫法可讀性不好,從 Python 2.6 之後,建議使用字串的 format 方法來取代 % 操作:

>>> '{0} is {1}'.format('Justin', 'caterpillar')
'Justin is caterpillar'
>>> '{real} is {nick}'.format(real = 'Justin', nick = 'caterpillar')
'Justin is caterpillar'
>>> '{0} is {nick}'.format('Justin', nick = 'caterpillar')
'Justin is caterpillar'
>>> import sys
>>> 'My platform is {pc.platform}'.format(pc = sys)
'My platform is linux2'

set 型態是無序群集,管理的元素不會重複而且 hashable。以下是 set 的幾個功能示範:

>>> admins = {'Justin', 'caterpillar'}  # 建立 set
>>> users = {'momor', 'hamini', 'Justin'}
>>> 'Justin' in admins  # 是否在站長群?
True
>>> admins & users      # 同時是站長群也是使用者群的?
{'Justin'}
>>> admins | users      # 是站長群或是使用者群的?
{'hamini', 'caterpillar', 'Justin', 'momor'}
>>> admins - users      # 站長群但不使用者群的?
{'caterpillar'}
>>> admins ^ users      # XOR
{'hamini', 'caterpillar', 'momor'}
>>> admins > users      # ∈
False
>>> admins < users
False

Python 中的 if..else 也有運算式(Expression)形式,使用上就像是 C 或 Java 的三元運算子 ?:。if 條件式成立的話,會傳回 if 左邊的值,否則傳回 else 右邊的值。例如上面的程式也可以寫為:

from sys import argv
print 'Hello, ' + (argv[1]) if len(argv) > 1 else 'Guest')

for 包含式(comprehension)也可以形式巢狀結構,例如有個元素都為 list 的 list,想將其中的 list 元素串起來,也就是將之平坦化,可以如下:

lts = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print [ele for lt in lts for ele in lt]

當你使用 [] 包圍住 for 包含式(comprehension) 時,會建立 list 實例,如果使用 {} 的話,可以建立 set 實例,重複的元素會自動去除。例如:

>>> {name for name in ['caterpillar', 'Justin', 'caterpillar', 'openhome']}
set(['caterpillar', 'Justin', 'openhome'])

也可以建立 dict 實例。例如:

>>> {name : passwd for name, passwd in zip(names, passwds)}
{'caterpillar': 123456, 'Justin': 13579, 'openhome': 987654}

上例中的 zip 函式,就如名稱意義,會將兩個 list 像拉鏈一樣,兩兩相扣在一起為 tuple,這些 tuple 元素組成一個新的 list,對於 tuple 元素組成的這個 list,每個 tuple 中的一對元素再指定給 name 與 passwd,最後這對 name 與 passwd 組成 dict 的一對鍵值。

Comments

comments powered by Disqus