python學習第一階段總結
1、字串切片的索引是可正,可負數
例子:
+---+---+---+---+---+---+
| P | y | t | h | o | n |
+---+---+---+---+---+---+
0 1 2 3 4 5 6
-6 -5 -4 -3 -2 -1
有個辦法可以很容易地記住切片的工作方式:切片時的索引是在兩個字元 之間 。左邊第一個字元的索引為 0,而長度為 n 的字串其最後一個字元的右界索引為 n。
2、迴圈 體 是 縮排 的:縮排是 Python 組織語句的方法。Python (還)不提供整合的行編輯功能,所以你要為每一個縮排行輸入 TAB 或空格。
實踐中建議你找個文字編輯來錄入複雜的 Python 程式,大多數文字編輯器提供自動縮排。互動式錄入複合語句時,必須在最後輸入一個空行來標識結束(因為直譯器沒辦法猜測你輸入的哪一行是最後一行),需要 注意的是同一個語句塊中的每一行必須縮排同樣數量的空白。
3、因為 **
的優先順序高於 -
,所以 -3**2
將解釋為 -(3**2)
且結果為 -9
。為了避免這點並得到 9
,你可以使用 (-3)**2
。
4、與其它語言不同,特殊字元例如 \n
在單引號('...'
)和雙引號("..."
)中具有相同的含義。兩者唯一的區別是在單引號中,你不需要轉義 "
(但你必須轉義 \'
),反之亦然。
5、可能會有零到多個 switch
或 case
語句。
6、把列表當作堆疊使用
列表方法使得列表可以很方便的做為一個堆疊來使用,堆疊作為特定的資料結構,最先進入的元素最後一個被釋放(後進先出)。用 append()
方法可以把一個元素新增到堆疊頂。用不指定索引的 pop()
方法可以把一個元素從堆疊頂釋放出來。例如:
>>> stack = [3, 4, 5] >>> stack.append(6) >>> stack.append(7) >>> stack [3, 4, 5, 6, 7] >>> stack.pop() 7 >>> stack [3, 4, 5, 6] >>> stack.pop() 6 >>> stack.pop() 5 >>> stack [3, 4]
7、把列表當作佇列使用
你也可以把列表當做佇列使用,佇列作為特定的資料結構,最先進入的元素最先釋放(先進先出)。不過,列表這樣用效率不高。相對來說從列表末尾新增和彈出很快;在頭部插入和彈出很慢(因為,為了一個元素,要移動整個列表中的所有元素)。
要實現佇列,使用 collections.deque,它為在首尾兩端快速插入和刪除而設計。例如:
>>> from collections import deque
>>> queue = deque(["Eric", "John", "Michael"])
>>> queue.append("Terry") # Terry arrives
>>> queue.append("Graham") # Graham arrives
>>> queue.popleft() # The first to arrive now leaves
'Eric'
>>> queue.popleft() # The second to arrive now leaves
'John'
>>> queue # Remaining queue in order of arrival
deque(['Michael', 'Terry', 'Graham'])
8、列表推導式
列表推導式由包含一個表示式的括號組成,表示式後面跟隨一個 for 子句,之後可以有零或多個 for或 if 子句。結果是一個列表,由表示式依據其後面的 for 和 if 子句上下文計算而來的結果構成。
例如,如下的列表推導式結合兩個列表的元素,如果元素之間不相等的話:
>>> [(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]
等同於:
值得注意的是在上面兩個方法中的 for 和 if 語句的順序。
如果想要得到一個元組(例如,上面例子中的 (x, y)
),必須要加上括號:
9、 集合
Python 還包含了一個數據型別 —— set (集合)。集合是一個無序不重複元素的集。基本功能包括關係測試和消除重複元素。集合物件還支援 union(聯合),intersection(交),difference(差)和 sysmmetric difference(對稱差集)等數學運算。
大括號或 set() 函式可以用來建立集合。注意:想要建立空集合,你必須使用 set()
而不是 {}
。後者用於建立空字典,我們在下一節中介紹的一種資料結構。
以下是一個簡單的演示:
>>> basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
>>> print(basket) # show that duplicates have been removed
{'orange', 'banana', 'pear', 'apple'}
>>> 'orange' in basket # fast membership testing
True
>>> 'crabgrass' in basket
False
>>> # Demonstrate set operations on unique letters from two words
...
>>> a = set('abracadabra')
>>> b = set('alacazam')
>>> a # unique letters in a
{'a', 'r', 'b', 'c', 'd'}
>>> a - b # letters in a but not in b
{'r', 'd', 'b'}
>>> a | b # letters in either a or b
{'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}
>>> a & b # letters in both a and b
{'a', 'c'}
>>> a ^ b # letters in a or b but not both
{'r', 'd', 'b', 'm', 'z', 'l'}
類似 列表推導式,這裡有一種集合推導式語法:
>>> a = {x for x in 'abracadabra' if x not in 'abc'}
>>> a
{'r', 'd'}
10、 深入條件控制
while
和 if
語句中使用的條件不僅可以使用比較,而且可以包含任意的操作。
比較操作符 in
和 not in
稽核值是否在一個區間之內。操作符 is
和 is not
比較兩個物件是否相同;這隻和諸如列表這樣的可變物件有關。所有的比較操作符具有相同的優先順序,低於所有的數值操作。
比較操作可以傳遞。例如 a < b == c
稽核是否 a
小於 b
並且 b
等於 c
。
比較操作可以通過邏輯操作符 and
和 or
組合,比較的結果可以用 not
來取反義。這些操作符的優先順序又低於比較操作符,在它們之中,not
具有最高的優先順序, or
優先順序最低,所以 A and not B or C
等於 (A and (notB)) or C
。當然,括號也可以用於比較表示式。
邏輯操作符 and
和 or
也稱作短路操作符:它們的引數從左向右解析,一旦結果可以確定就停止。例如,如果 A
和 C
為真而 B
為假, A and B and C
不會解析 C
。作用於一個普通的非邏輯值時,短路操作符的返回值通常是最後一個變數。
可以把比較或其它邏輯表示式的返回值賦給一個變數,例如:
>>> string1, string2, string3 = '', 'Trondheim', 'Hammer Dance'
>>> non_null = string1 or string2 or string3
>>> non_null
'Trondheim'
需要注意的是 Python 與 C 不同,在表示式內部不能賦值。C 程式設計師經常對此抱怨,不過它避免了一類在 C 程式中司空見慣的錯誤:想要在解析式中使 ==
時誤用了 =
操作符。