zoukankan      html  css  js  c++  java
  • 列表生成式、生成器、迭代

    一、列表生成式 

    1、range()可以生成整数序列

    range(a,b)生成a-b的整数序列,包括a,但不包括b

    range(n)生成0-n的整数序列,包括0,但不包括n

    将整数序列转成list,可以使用list(range(n))

    2、可以在列表中加计算式生成特定规律的列表

    [x*x for x in range(1,11)]就生成了[1x1,2x2,3x3,...,10x10]的列表

    3、还可以使用多层循环生成列表

    [m+n for m in 'ABC' for n in 'XYZ']

    [变量的计算式 变量1的for循环 变量2的for循环 变量n的for循环]

    4、dict的items()可以同时迭代key和value

    >>> d = {'x': 'A', 'y': 'B', 'z': 'C' }
    >>> [k + '=' + v for k, v in d.items()]
    ['y=B', 'x=A', 'z=C']

    5、计算式还可以使用变量的方法

    例如[s.lower() for s in L]

    二、生成器

    1、第一种生成器的创建方式

    列表生成式一旦赋值,那么所使用的存储空间就确定下来了,如果只访问前部的部分元素,那么后面的空间就浪费了,因此提出了生成器的概念,给生成器赋予某种算法规律,不需要创建完整的list,而只需要创建一个生成器,一边循环一边计算,值在未被计算出来前不占用存储,节省存储空间。

    生成器创建如下:

    g = (x * x for x in range(10))

    一般使用for循环迭代生成器

    for n in g:
        print(n)

    2、第二种生成器的创建方式

    用函数定义推算规则,如果一个函数定义中包含yield关键字,那么这个函数就是一个generator

    例如斐波那契数列的generator创建如下:

    def fib(n):
    a,b=0,1
    for i in range(n):
    yield b
    a,b=b,a+b

    调用时如下:

    for  k in fib(6):

      print(k)  

    调用时,当函数中遇到yield时,返回打印yield 后面的值,然后继续执行yield之后的语句

    generator到结束时有StopIteration错误,如果捕获到该错误就知道到结尾了

    3、杨辉三角的打印list

           1

            1   1
          1   2   1
        1   3   3   1
      1   4   6   4   1
    1   5   10  10  5   1
    def YH():
    L=[1]
    while True:
    yield L
    L=[L[i]+L[i+1] for i in range(len(L)-1)]
    L.insert(0,1)
    L.append(1)
    n=0
    for i in YH():
    print(i)
    n+=1
    if n>=10:
    break

    三、迭代器

    1、凡是可作用于for循环的对象都是Iterable类型;

    凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;

    集合数据类型如listdictstr等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。

    2、可以通过isinstance(a,Iterator)和isinstance(a,Iterable)来判断类型

  • 相关阅读:
    centos 7 安装nvidia显卡驱动
    Ubuntu 16.04LTS 安装 MATLAB 2014B
    Linux 查看CPU温度
    pip: unsupported locale setting
    ubuntu 卸载从源码安装的 emacs
    html css使用特殊自定义字体避免侵权
    JS操作iframe父级子级元素,jquery自动点击iframe里按钮
    Iframe标签显示目标网页的指定区域,视频可全屏可缩小
    禁止所有搜索爬虫访问网站指定目录robots.txt
    ThinkPHP5.0、5.1和6.0教程文档合集(免费下载)
  • 原文地址:https://www.cnblogs.com/vonkimi/p/6847754.html
Copyright © 2011-2022 走看看