zoukankan      html  css  js  c++  java
  • 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 
    悟已往之不谏,知来者之可追
  • 相关阅读:
    python--第十天总结(Select/Poll/Epoll使用 )
    python--第九天总结
    数据库文件*.sdf文件定时备份,但是大小的增量在不断增长的问题排查
    打开和创建SqlCe(.sdf文件)
    C# 在RichTextBox中滚动鼠标时滚动的是父窗口的滚动条
    Foxmail 7.0破解版,拷贝到新机器后,发送邮件乱码问题
    C# RichTextBox设置行间距
    winform在鼠标操作时要判断是否按下Ctrl键
    vs2015 制作安装包额外需要安装的软件VSI_bundle
    vs 2015工具栏添加Tab Order
  • 原文地址:https://www.cnblogs.com/ljh-study/p/13768192.html
Copyright © 2011-2022 走看看