Python基础12 列表的推导式

本来是和前面的列表内容一块的

但是加起来代码太长,列表推导式就单独拆分到了这里来写

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 

 

posted @ 2020-10-04 20:05  想活出点人样  阅读(125)  评论(0编辑  收藏  举报