把清單當作堆棧使用
清單方法使得清單可以很友善的做為一個堆棧來使用,堆棧作為特定的資料結構,最先進入的元素最後一個被釋放(後進先出)。用
append()
方法可以把一個元素添加到堆棧頂。用不指定索引的
pop()
方法可以把一個元素從堆棧頂釋放出來。例如:《 Python辦公自動化讓工作更輕松 》
>>> 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]
5.1.2. 把清單當作隊列使用
你也可以把清單當做隊列使用,隊列作為特定的資料結構,最先進入的元素最先釋放(先進先出)。不過,清單這樣用效率不高。相對來說從清單末尾添加和彈出很快;在頭部插入和彈出很慢(因為,為了一個元素,要移動整個清單中的所有元素)。
要實作隊列,使用 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'])
5.1.3. 清單推導式
清單推導式為從序列中建立清單提供了一個簡單的方法。普通的應用程式通過将一些操作應用于序列的每個成員并通過傳回的元素建立清單,或者通過滿足特定條件的元素建立子序列。
例如, 假設我們建立一個 squares 清單, 可以像下面方式:
>>> squares = []
>>> for x in range(10):
... squares.append(x**2)
...
>>> squares
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
注意這個 for 循環中的被建立(或被重寫)的名為
x
的變量在循環完畢後依然存在。使用如下方法,我們可以計算squares的值而不會産生任何的副作用:
squares = list(map(lambda x: x**2, range(10)))
或者,等價于:
squares = [x**2 for x in range(10)]
上面這個方法更加簡明且易讀.
清單推導式由包含一個表達式的括号組成,表達式後面跟随一個 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)]
>>> combs = []
>>> for x in [1,2,3]:
... for y in [3,1,4]:
... if x != y:
... combs.append((x, y))
...
>>> combs
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]