# 推导式 ## 推导式详细格式 ```plain 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:  根据条件过滤哪些值可以。 ``` ## 列表推导式 30以内所有能被3整除的数 ```python multiples = [i for i in range(30) if i % 3 is 0] print(multiples) ``` 30以内所有能被3整除的数的平方 ```python def squared(x): return x*x multiples = [squared(i) for i in range(30) if i % 3 is 0] print(multiples) ``` 找到嵌套列表中名字含有两个及以上‘a’的所有名字 ```python fruits = [['peach','Lemon','Pear','avocado','cantaloupe','Banana','Grape'], ['raisins','plum','apricot','nectarine','orange','papaya']] print([name for lst in fruits for name in lst if name.count('a') >= 2]) ``` ## 字典推导式 将一个字典的key和value对调 ```python dic1 = {'a':1,'b':2} dic2 = {dic1[k]: k for k in dic1} print(dic2) ``` 合并大小写对应的value值,将k统一成小写 ```python dic1 = {'a':1,'b':2,'A':4,'Y':9} dic2 = {k.lower():dic1.get(k.lower(),0) + dic1.get(k.upper(),0) for k in dic1.keys()} print(dic2) ``` ## 集合推导式 计算列表中每个值的平方,自带去重功能 ```python l = [1,2,3,4,1,-1,-2,3] squared = {x**2 for x in l} print(squared) ``` ## 练习题 1. 过滤掉长度小于3的字符串列表,并将剩下的转换成大写字母 2. 求(x,y)其中x是0-5之间的偶数,y是0-5之间的奇数组成的元祖列表 3. 将1000以内的素数放入一个列表中 4. 推导式实现九九乘法表 ```python print("\n".join(["\t".join([f"{i}x{j}={i*j}" for j in range(1, i+1)]) for i in range(1,10)])) # 1x1=1 # 2x1=2 2x2=4 # 3x1=3 3x2=6 3x3=9 # 4x1=4 4x2=8 4x3=12 4x4=16 # 5x1=5 5x2=10 5x3=15 5x4=20 5x5=25 # 6x1=6 6x2=12 6x3=18 6x4=24 6x5=30 6x6=36 # 7x1=7 7x2=14 7x3=21 7x4=28 7x5=35 7x6=42 7x7=49 # 8x1=8 8x2=16 8x3=24 8x4=32 8x5=40 8x6=48 8x7=56 8x8=64 # 9x1=9 9x2=18 9x3=27 9x4=36 9x5=45 9x6=54 9x7=63 9x8=72 9x9=81 ```