1. 程式人生 > >python 學習彙總29:各種推導式( tcy)

python 學習彙總29:各種推導式( tcy)

python的各種推導式(輕量級迴圈) 2018 / 6 / 16  
1.推導式用途:
推導式是從一個數據序列構建一個新的資料序列的結構體,類似於for  迴圈
列表/字典/集合推導式優於 map/filter  

 

 

2.基本格式
v = ( out_exp_res for out_exp1 in sequence1 if condition1
for out_exp2 in sequence2 if condition2
...... )
variable = [(out_exp_res) for out_exp in input_list if out_exp == 2]

引數:
# out_exp_res:如列表生成元素表示式(可以是有返回值的函式)
# for out_exp in input_list: 迭代input_list將out_exp傳入out_exp_res表示式中。
# if out_exp == 2:   條件表示式

 

 

 

使用說明: 
1)生成器表示式由圓括號包圍,列表解析由方括號包圍
2)表示式最外部的符號為(),[],{:},{,}依次生成迭代器,列表,字典,集合;
3)'(out_exp_res)'外邊的符號為(,), [], {:}, {,} 依次生成的元素類別為元祖,列表,字典,集合
4) 一個元素可不加符號,多於2個必加符號

 

 

2.1.()生成器表示式  
# 如果生成器出現在一個函式中,則允許使用子句和表示式

geners = (i for i in range(10) if i % 3 is 0)#type 'generator'
for i in geners: print i # 0 3 6 9

 

 

2.2.[]列表推導式
def add(x, y):
return x + y

a = [{x: add(y,1000)} for x in range(10)
for y in range(100) if x % 5 == 0 and y % 50 == 0]
# [{0:1000},{0:1050},{5:1000}, {5: 1050}]
2.3.{:}字典推導式
d = {'a': 1, 'b': 2, 'C': 3}
d2 = {k.lower(): d.get(k.lower(), 0) + d.get(k.upper(), 0)
for k in d1.keys() if k.lower() in ['a', 'b']} # 可以多行書寫

# 快速更換key和value
d2 = {v: k for k, v in d.items()}
2.4.{ ,}集合推導式
s = {x for x in [1, 1, 2]}
3.例項
#建立一個將被立即傳遞給函式的迭代器:
obj_total = sum(obj.count for obj in list_all_objects())
#迴圈次數:
seq1 = 'abc';seq2 = (1,2,3)
[(x, y) for x in seq1 for y in seq2]
#列表表示式迴圈9次;能用方括號;大括號資料順序有些異常,不要用
# [('a', 1), ('a', 2), ('a', 3),
#  ('b', 1), ('b', 2), ('b', 3),
#  ('c', 1), ('c', 2), ('c', 3)]
[(x, y) for i1, x in enumerate(seq1) for i2, y in enumerate(seq2) if i1 == i2]
# [('a', 1), ('b', 2), ('c', 3)]