zoukankan      html  css  js  c++  java
  • Python 学习笔记 之 02

    切片

     语法:
      li.[x:y:z]
      li为list、tuple等数据类型,x为开始进行切片的位置,y为切片停止的位置(不包含y),z为xy切片后的结果里,每间隔z个元素输出一次结果。
      x默认为0时可以省略,y默认为0时可以省略,z默认为1时可以省略。如:
       >>> ['a','b','c','d','e','f'] [0:3]
       ['a', 'b', 'c']
       or
       >>> a =  ['a','b','c','d','e','f']
       >>> a[0:3]
       ['a', 'b', 'c']
       取前10个元素
        a[:10]
       取后10个元素
        a[-10:]
       取11~20个元素
        a[10:20]
       取前10个元素,每两个元素取一个(一共取5个)
        a[:10:2] 
       取全部元素(克隆一个)
        a[:]        #相当于从0取到最后,所以两个值都省略了 
      也支持倒数切片
          >>> a[-2:-1]
       ['e']
       

    迭代

     用for循环来遍历list、tuple、dict、str等可迭代对象,这种遍历称为迭代。

     除了list、tuple等有下标对象之外,dict这种没有下标的对象也可以进行迭代,默认情况下,dict迭代的是key,如需要迭代value,可以使用dict.value(),如果要同时迭代key和value,可以使用dict.items()。

     当使用for循环时,只要作用于一个可迭代对象,就可以正常运行,不用太关心该对象的类型。
     

    列表生成式

     将要生成的元素放到前面,后面跟for循环美酒可以轻松的创建出list了。
     语法:[列表条件 for x in ... ],如: [ x for x in range(1,200) ]
     

    生成器generator(可迭代对象)

     受内存和资源利用限制,当需要一个巨量元素的列表,或仅需要访问巨量列表中的几个元素的情况时,如果list的元素可以按照算法推算出来,那么就可以在循环的过程中不断推算出后面的元素,这样就不必创建完整的list,节省大部分空间,这种机制就是生成器。

     创建生成器:

      把一个列表生成式的[]改为() ,就创建了一个生成器。可以用next()函数获得该generator的下一个返回值。实际使用时,用for循环进行迭代。
      当推算算法比较复杂时,for循环可能无法实现算法,这时可以使用函数来实现算法。
      目前来讲,将函数中的输出行(如print()函数)替换为 yield 关键字就可以了。如果函数定义包含了yield关键字,这个函数就是一个generator。在函数执行时,遇到yield就会停中断,下次又会接着运继续执行。当执行满足条件后,则退出循环,当没有更多的yield可以执行时,再次调用next()就会抛出错误。因此在正常循环调用yield过程中,需要给循环设定条件来退出循环,不然会产生一个无限元素的数列出来。
      
      用for循环迭代generator函数时,拿不到return语句的返回值。需要捕获StopIteration错误,将返回值包含在StopIteration的vaule中。
     

    迭代器

     可以被next()函数不断返回下一个值的可迭代对象称为迭代器Iterator。
     可迭代对象不一定是迭代器,如:list、dict、str,把非迭代器的可迭代对象Iterable变成迭代器Iterator,可以使用iter()函数
     迭代器Iterator对象表示是一个惰性计算的序列,一个数据流。这个数据流可以看作为一个有序序列,但是却不能提前知道序列长度,只能不断通过next()函数来实现按需计算下一个数据。Iterator可以表示一个无限大的数据流,而list、tuple等类型对象永远不可能存储无限大的数据的,如全部自然数。
     for循环本质上就是不断调用next()函数来实现的。
  • 相关阅读:
    2015,刺激、快乐与煎熬
    Spring Security安全框架入门篇
    亲密接触Redis-第一天
    Shiro安全框架入门篇(登录验证实例详解与源码)
    javaweb异常提示信息统一处理(使用springmvc,附源码)
    ActiveMQ + NodeJS + Stomp 极简入门
    Java异常封装(自己定义错误码和描述,附源码)
    SpringMVC+BUI实现文件上传(附详解,源码下载)
    获取web项目中的webroot目录路径
    struts中request传递中文乱码问题
  • 原文地址:https://www.cnblogs.com/konggg/p/9111888.html
Copyright © 2011-2022 走看看