天天看點

Python容器之清單一、清單的使用方法二、清單使用方法拓展三、清單推導式

一、清單的使用方法

下圖列出清單的使用方法
Python容器之清單一、清單的使用方法二、清單使用方法拓展三、清單推導式

二、清單使用方法拓展

1、清單作為棧使用(推薦)

①、棧的定義: 棧是計算機資料結構中的術語, 它按照先進後出的原則存儲資料.
②、清單作為棧的使用:

清單的append()方法, 可以把資料附加到最後.

清單的pop()方法, 可以把最後的資料删除.

兩者結合, 實作了棧的原理.

_list = ['a','b','c']
_list.append('d') 	==> ['a','b','c','d']
_list.pop() 	==>['a','b','c']
           

2、清單作為隊列使用(不推薦)

①、棧的定義:隊列是計算機資料結構中的術語, 它按照先進先出的原則存儲資料.
②、清單作為隊列的使用:

清單的append()方法, 可以把資料附加到清單中.

清單的pop(0), 可以把第一順序資料删除.

兩者結合, 實作了隊列的使用.

_list = []
_list.append('a') --> ['a'] # 先插入a
_list.append('b') --> ['a','b']# 再插入b
_list.pop(0) --> ['b'] # 删除第一個字元
           

實際上, 官網不推薦這種方法的原因, 是因為清單删除索引為0的元素後, 索引1及後續的元素都需要向前挪動一位, 導緻開銷很大.

3、隊列的正确使用方式

在開發場景中一定會遇到隊列的使用場景.

Python官網也推薦了其他方法來實作.

以下代碼源自官網.

>>> 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'])
           

Ps: 寫在最後, Python還有Queue子產品, 有興趣的朋友可以直行研究.

三、清單推導式

清單推導式展現出Python簡潔文法的特性.

假設我們有如下代碼, 列印出0-10的平方值.

# 青銅代碼
>>> squares = []
>>> for x in range(10):
...     squares.append(x**2)
...
>>> squares
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

# 王者代碼
squares = [x**2 for x in range(10)]
>>> squares
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
           

當然我們還可以用Lambda表達式來做

# 王者代碼
squares = list(map(lambda x: x**2, range(10)))
>>> squares
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
           

是不是夠簡潔!!!

當然, 應用清單推導式不僅可以解決一次for循環, 還可以解決二次甚至多次for循環.

代碼如下.

>>> [(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)]
           

有興趣的朋友可以深入了解下, 一定有助于代碼品質的提高.

參考文獻: https://docs.python.org/zh-cn/3.7/tutorial/datastructures.html