本来是和前面的列表内容一块的
但是加起来代码太长,列表推导式就单独拆分到了这里来写
PS:这是我学习过程中一面学一面尝试的代码,尝试内容很多,希望理解
1 #列表推导式 2 #这是个新的东西 3 f=[]; 4 #我们先定义一个空列表 5 #然后我们再写推导的式子 6 7 for x in range(10): 8 if(x%2==0): 9 f.append(x**2); 10 print(f); 11 #这样的一段代码 12 #我们就实现了将可以被2整除的数据全部平方然后逐个添加至列表 13 #但是其实我们可以把它们简化到List本身上去 14 15 g = [x**2 for x in range(10) if(x%2==0)]; 16 #List = 输出表达式 循环部分 判断语句 17 print(g); 18 #输出结果是完全一样的 19 #同理我们还能写出不一样的式子 20 21 h=[x**2 for x in range(50) if(x%2==0) if(x%5==0)]; 22 print(h); 23 #这里我们尝试后发现 24 #前面的是表达式, 25 #而在循环语句中可以做判定的嵌套 26 #这样一来,可以做多个判断 27 28 i=[x*y for y in range(10) for x in range(10) if(y==10) if(x==2)]; 29 print(i); 30 #而这里的输出结果就是空 31 #这是为什么呢? 32 for y in range(10): 33 for x in range(10): 34 if(y==10): 35 if(x==2): 36 print(y*x); 37 #这段代码才是我们想要表达的意思 38 #这就这涉及到了for的运算规则了 39 #Python的for和C中间的是不一样的 40 #y 和 x是作为迭代函数出现的 41 #那我们在for嵌套了for 的时候其实y的值是没有发生传递的吗? 42 #这只是一种猜想 43 #我们来验证一下 44 45 for y in range(2): 46 print("第一个y=",y); 47 for x in range(2): 48 print("第二层y=",y); 49 #从输出的结果来看显然y的值是发生的传递的 50 #在for这个大循环没做完之前y作为迭代变量还是存在的 51 52 for y in range(10): 53 for x in range(10): 54 if(y==10): 55 print("y==10啦!"); 56 if(x==2): 57 print("x==2啦!"); 58 print(y*x); 59 #我们将原来的代码改进了一下 60 #当y==10的时候就输出 61 #来确保是真的y==10 62 #但是显然没有得出结果 63 64 #我们换个思路 65 #我们知道int这样的数字数据类型是不能作为迭代变量的 66 #所以我们可以先测试一下迭代变量的数据类型 67 68 for y in range(3): 69 print("y的数据类型是",type(y)); 70 #我们发现y的数据类型还是int型 71 #那为什么if()没执行呢? 72 73 #通过监控变量x和y 74 #我们发现,其实range(x)是生成存在x元素的列表 75 #而且是从0开始的 76 #所以这里的最大值是9 而不是x的10 77 78 for y in range(10): 79 for x in range(10): 80 if(y==9): 81 if(x==2): 82 print(y*x); 83 #所以这样修改 84 #就会得到正确的输出值 85 86 #我们对i清除元素后重新赋值一次 87 i.clear(); 88 i=[x*y for y in range(10) for x in range(10) if(y==9) if(x==2)]; 89 print(i); 90 #这次结果就和我们刚刚修改过的数据是一样的 91 #那么这个可不可以再修改一下呢? 92 93 ''' 94 for y in range(3): 95 print("y的值为",y); 96 for x in range(3): 97 print("x的值为",x); 98 if(y==2): 99 print("y==2啦!"); 100 if(x==2): 101 print("x==2啦!"); 102 print(y*x); 103 104 ''' 105 #将其修改成这个样子 106 #我们对i清除元素后重新赋值一次 107 i.clear(); 108 #i=[print("x==2啦"); x*y for y in range(3) for x in range(3) if(y==2) if(x==2)]; 109 #这里我们发现,在最后一层的表达式中,只能写一个在最前面 110 #因为表达式是要赋值给List中的 111 112 #i=[ x*y for y in range(3) print("") for x in range(3) if(y==2) if(x==2)]; 113 #所以就算我们在这里写了,也是不可以输出的 114 115 #那么在这个List的运算中,是要为其内部赋值,自然不会让你输出东西 116 #但是对本来的变量进行操作时可以的 117 #那么我们可以实现这些内容吗 118 119 ''' 120 for y in range(3): 121 shuju=shuju+1; 122 for x in range(3): 123 shuju=shuju+1 124 if(y==2): 125 shuju=shuju+1; 126 if(x==2): 127 shuju=shuju+1; 128 y*x; 129 130 131 ''' 132 133 shuju=0; 134 #i=[ x*y for y in range(3) shuju+=1; for x in range(3) if(y==2) if(x==2)]; 135 #任然不行 136 #不能在for中间对其其进行操作 137 138 #i=[ x*y for y in range(3) for x in range(3) x=x+y; for z in range(2) if(y==2) if(x==2)]; 139 #即使是迭代变量内部的数据也不能在这里写改变 140 141 #print(i); 142 143 i=[ x*y for y in range(3) if(y==2) for x in range(3) if(y==2) if(x==2)]; 144 print(i); 145 #但是这里我们发现 146 #却可以在中间循环区域加上if的判断语句 147 #我们在这里加上判断语句后 148 #程序的结构改变了 149 ''' 150 for y in range(3): 151 if(y==2): 152 for(x in range(3)) 153 ''' 154 #形成了这样的结构 155 #这样来讲 156 #每一句话在这里都是一层判断 157 #是不存在一个循环或者判断下写多个语句的 158 159 i.clear(); 160 #i=[ x*y for y in range(3) while y<10: for x in range(3) if(y==2) if(x==2)]; 161 #从这里看出while语句也是不可行的 162 163 164 #总结出来 165 #列表的推导可以写多个嵌套和判断 166 #在循环区可以写多个循环 167 #在循环区还可以加上判断 168 #在判断区也可以写多个判断 169 #没一句代码都是一层 170 #表达式只能写一句话 171 #只能使用for和if