zoukankan      html  css  js  c++  java
  • python 推导式和迭代器、生成器

    1、常用推导式

    • 推导式是从一个或者多个迭代器快速简洁创建数据结构的一种方法。
    1.1 _ 列表推导式
    • 最简单的形式:  [exprssion for item in iterable]  
      • 示例:  number_list = [x for x in range(1,10)] 
    • 加上条件表达式的形式:  [exprsssion for item in iterable if condition] 
      • 示例: a_list = [x for x in range(1,7) if x %2 ==1] 
    • 多个for的嵌套表达式: [(x,y) for x in x_list for y in y_list]  生成一个x,y的元组的列表。
    1.2 _ 字典推导式
    • 最简单的形式: {key_expression:value_expression for expression in iterable}  
      • 示例: word = 'letter',let_dict = {let:word.count(let) for let in word} 
      • 上一例子有字母出现两次,浪费时间用set来改善  let_dict = {let:word.count(let) for let in set(word)} 
    1.3 _ 集合推导式
    • 与列表和字典相似:  {expression for expression in iterable} 
    1.4 _ 生成器推导式
    • 元组没有推导式,它的圆括号是用来坐生成器推导式 
      •  t_generotor = (x for x in range(1,8)) 
    • 生成器可以转化成列表推导式  t_list = list(t_generotor) 
    • 一个生成器只能运行一次,运行完就没有了。列表、集合字符串和字典都是存储在内存中,但是生成器仅在运行中产生值,不会被存储下来,所以不能重新使用或者备份一个生成器。

    2、生成器

    • 生成器是用来创建一个python序列的一个对象。使用它可以迭代庞大序列,且不需要在内存创建和存储整个序列。
    • 每次迭代生成器时,它会记录上一次调用的位置,并且返回下一个值。这一点和普通的函数是不一样的,一般函数都不会记录上一次调用,而且都会在函数的第一行开始执行。
    • 创建一个比较大序列,使用生成器推导式的代码会很长,可以写一个生成器函数。生成器函数和普通函数类似,但是它的返回值使用yield语句声明而不是return。

      • def my_range(first=0, last=10, step=1): 
        <ul><li>number = first</li> 
        <li>while number < last:</li> 
        <li>yield number</li> 
        <li>number+=step
        
    • my_range 返回的是一个生成器对象,可以使用这个生成器对象进行迭代: for x in my_range():print x 

    3、使用zip并行迭代

    • 使用迭代的时候,可以通过zip()对多个序列进行并行迭代. 
      • days= {'monday' , 'tuesday', 'wednesday'}</li> 
        <li>fruit= {'banana', 'orange', 'peach'}</li> 
        <li>dessert = {'misc', 'drink', 'ice', 'pudding'}</li> 
        <li>for day,fru,drink in zip(days,fruit,dessert):</li> 
        <li>print day,fru,drink
        
    • zip()函数在最短序列用完就会停止,上述最长的列表后面的元素无法填充
    • 配合ditc()函数和zip()函数的返回值可以得到一个字典. 
      •  dict(zip(list_1,list_2)) 

    4、迭代器

      • 4.1 迭代器规则 
        • 迭代的意思是重复做一些事很多次——就想循环中那样。
        • __iter__的方法返回一个迭代器(iterator),所谓的迭代器就是具有next方法(这个方法在调用时不需要传递任何参数)。在调用next方法时,迭代器会返回它的下一个值。如果next方法被调用,但迭代器没有值可以返回,就会引发一个stopIteration异常。[3.0中是__next__]
        • 一个实现了__iter__方法的对象是可迭代的,一个实现了next方法的对象则是迭代器
  • 相关阅读:
    Windows系统之间文件互传
    PHP MySQL -2021.01.30
    Python MySQL
    [转载]python之函数的使用及异常处理2021.1.30
    python之文件操作
    Python学习-2021.1.28
    [转载]Metasploit漏洞攻击
    [转载]使用命令给windows用户提权
    [转载]nmap的使用
    Windows和Linux简单命令的总结
  • 原文地址:https://www.cnblogs.com/starsea/p/5285510.html
Copyright © 2011-2022 走看看