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

猜你喜欢

转载自blog.csdn.net/tcy23456/article/details/84076825