列表解析是python總要的語法糖,列表解析的速度比for in 迭代快
- 基礎語法
ret_list = [expression for item in iterator]
等價代碼如下:
ret_list= []
for item in iterator:
ret_list.append.(expression)
- 帶條件的類表解析
[x + 1 for x in range(10) if x % 2 == 0]
等價代碼如下:
lst = []
for x in rang(10):
if x % 2 == 0:
lst.append(x + 1)
- 多個條件的類表解析
[x + 1 for x in range(10) if x % 2 == 0 if x > 2]
等價代碼如下:
lst = []
for x in rang(10):
if x % 2 == 0:
if x > 2:
lst.append(x + 1)
相當于沒多一個if判斷,就多一層嵌套
- 多個列表,可求笛卡爾積
ret = [expression for x in X for y in Y]
多列表的情況下也可以添加條件,類似于上面提到的。
X = [1, 2, 3, 4, 5]
Y = [6, 7, 8, 9, 0]
[(x, y) for x in X for y in Y]
等價代碼如下:
X = [1, 2, 3, 4, 5]
Y = [6, 7, 8, 9, 0]
ret = []
for x in X:
for y in Y:
ret.append((x, y))
列表解析的格式也適用于集合解析
- 基礎語法
ret_set = {expression for item in iterator}
等價代碼如下:
ret_set = set()
for item in iterator:
ret_set.add(item)
多條件、多列表的使用方式跟列表的類似。
列表解析的格式也適用于字典解析
- 基礎語法
ret_dict = {expression_K: expression_V for item in iterator}
等價代碼如下:
ret_dict = dict()
for item in iterator:
ret_dict.update({expression_K: expression_V})
多條件、多列表的使用方式跟列表的類似。