VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > temp > 简明python教程 >
  • python基础(14):生成器、列表推导式(2)

send("胡辣汤")
  • print(ret2)
  • ret3 = gen.send("狗粮")
  • print(ret3)
  • ret4 = gen.send("猫粮")
  • print(ret4)
  • send和__next__()区别:
    1. send和next()都是让⽣成器向下走⼀次。
    2. send可以给上⼀个yield的位置传递值,不能给最后⼀个yield发送值,在第⼀次执⾏⽣成器代码的时候不能使⽤send()。
    ⽣成器可以使⽤for循环来循环获取内部的元素:
    
    		
    1. def func():
    2.   print(111)
    3.   yield 222
    4.   print(333)
    5.   yield 444
    6.   print(555)
    7.   yield 666
    8. gen = func()
    9. for i in gen:
    10.   print(i)
    11.    结果:
    12. 111
    13. 222
    14. 333
    15. 444
    16. 555
    17. 666
    回到顶部(go to top)

    2. 列表推导式, ⽣成器表达式以及其他推导式

    ⾸先我们先看⼀下这样的代码,给出⼀个列表,通过循环,向列表中添加1-14 :
    
    		
    1. lst = []
    2. for i in range(1, 15):
    3.   lst.append(i)
    4. print(lst)
    替换成列表推导式:
    
    			
    1. lst = [i for i in range(1, 15)]
    2. print(lst)
    列表推导式是通过⼀⾏来构建你要的列表,列表推导式看起来代码简单,但是出现错误之后很难排查。
    列表推导式的常⽤写法:
    [ 结果 for 变量 in 可迭代对象]
    例,从python1期到python14期写入列表lst:
    
    		
    1. lst = ['python%s' % i for i in range(1,15)]
    2. print(lst)
    我们还可以对列表中的数据进⾏筛选
    筛选模式:
    [ 结果 for 变量 in 可迭代对象 if 条件 ]
    
    		
    1. # 获取1-100内所有的偶数
    2. lst = [i for i in range(1, 100) if i % 2 == 0]
    3. print(lst)
    ⽣成器表达式和列表推导式的语法基本上是⼀样的,只是把[]替换成()
    
    		
    1. gen = (i for i in range(10))
    2. print(gen)
    3. 结果:
    4. <generator object <genexpr> at 0x106768f10>
    打印的结果就是⼀个⽣成器,我们可以使⽤for循环来循环这个⽣成器:
    
    		
    1. gen = ("麻花藤我第%s次爱你" % i for i in range(10))
    2. for i in gen:
    3.   print(i)
    ⽣成器表达式也可以进⾏筛选:# 获取1-100内能被3整除的数
    
    		
    1. gen = (i for i in range(1,100) if i % 3 == 0)
    2. for num in gen:
    3.   print(num)
    4. # 100以内能被3整除的数的平⽅
    5. gen = (i * i for i in range(100) if i % 3 == 0)
    6. for num in gen:
    7.   print(num)
    8. # 寻找名字中带有两个e的⼈的名字
    9. names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven','Joe'], ['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']]
    10. # 不⽤推导式和表达式
    11. result = []
    12. for first in names:
    13.   for name in first:
    14.     if name.count("e
    
    相关教程