zoukankan      html  css  js  c++  java
  • Pythond的推导模式和迭代器

    一、推导式是Python中很强大的、很受欢迎的特性,具有语言简洁,速度快等优点,并且多以[]为推导标志。推导式包括:

      1.列表推导式

      2.字典推导式

      3.集合推导式

      嵌套列表推导式

    【列表推导式】

      列表推导能非常简洁的构造一个新列表:只用一条简洁的表达式即可对得到的元素进行转换变形

    例如代码如下:

      names = ['Bob','Tom','alice','Jerry','Wendy','Smith']

      print( [name.upper() for name in names if len(name)>3])

     输出: ['ALICE', 'JERRY', 'WENDY', 'SMITH']

    【字典推导式】

      字典和集合推导式是该思想的延续,语法差不多,只不过产生的是集合和字典而已。

    代码如下:

       strings = ['a','is','b','if','c','else']

       D = {k: v for k,v in enumerate(strings)}

      print( D)

    【集合推导式】

      集合推导式跟列表推导式非常相似,唯一区别在于用{}代替[]

    代码如下:

       strings = ['a','is','with','if','file','exception']

      a= {len(s) for s in strings} #有长度相同的会只留一个,这在实际上也非常有用

      pirnt(a)

      输出:1, 2, 4, 9

    【嵌套列表推导式】

      嵌套列表是指列表中嵌套列表

    m=[[1,2,3],[4,5,6],[7,8,9]]
    n=[[2,2,4],[3,2,1],[2,2,1]]
    a=[[m[i][j]*n[i][j] for i in range(len(m))] for j in range(len(m))]
    print(a)
    输出:[[2, 12, 14], [4, 10, 16], [12, 6, 9]]

    二、迭代器

    迭代器仅是一容器对象,它实现了迭代器协议。它有两个基本方法:
    1)__next__()方法
    返回容器的下一个元素
    2)__iter__()方法
    返回迭代器自身

    注意:迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退

    三、生成器

    第一种方式:将列表的[]改为(),里面可以写推导
    生成器只要调用next()方法即可得到下一个值,到最后一个后异常(StopIteration)退出
    用表达式做生成器
    例:
    test=(x for x in rang(10))
    next(test)或test.__next__()
    第二种方式:
    通过裴波那切序列:将print换成yield,每次生成一个值
    但是调用方法时没有结果
    在方法内使用yield做生成器,这样调用此方法时,会得出一个结果
    然后也是可以调用next()
    每到yield时,就会停止,返回当前这个值,可以一次一次next()调用
    生成器可以被循环迭代,直到循环结束

  • 相关阅读:
    (转)非常好的协同过滤入门文章
    PHP错误:Call to undefined function curl_init()
    (转)Ubuntu下Apache、php、mysql默认安装路径
    (转)matlab各类数学公式
    centos7下安装momgodb3
    centos7 使用mount 挂载window10 (超简单)
    Centos7 安装nginx1.14
    Centos7 安装MySQL5.7
    python3.5 安装 numpy1.14.4
    python3 tkinter 桌面软件教程
  • 原文地址:https://www.cnblogs.com/qianshuixianyu/p/9141526.html
Copyright © 2011-2022 走看看