python 學習彙總29:各種推導式( tcy)
阿新 • • 發佈:2018-11-19
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)]