码迷,mamicode.com
首页 > 其他好文 > 详细

列表生成式、生成器、迭代器

时间:2016-11-12 23:14:27      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:bsp   函数   int   ble   pre   return   iterator   instance   使用   

一句话概念

列表生成式——可以直接在列表里进行运算

生成器——一边循环一边计算的机制,称为生成器:generator(就是生成一个不运行的函数或者列表,即数据流)

第二句:生成器与列表的区别——生成器你不知道长度,就是一个数据流;list、dict、str你知道长度

迭代器——可以被next()函数调用并不断返回下一个值的对象称为迭代器

第二句:可迭代对象——可以直接作用于for循环的对象统称为可迭代对象:Iterable

第三句:生成器一定是迭代器,迭代器不一定是生成器

 

列表生成式

data = [1,2,2,34]

data = [i*2 for i in  data]     #直接运算

data = [i*2 if i>3 else i-1 for i in data ]     #三元运算
print(data)

 

生成器

第一种方法,列表推到式
data = (x for x in range(10))       #用小括号表示
print(data) #此时只打印函数内存,
第二种复杂式方式
#斐波那契数列

def fob(num):
    a,b = 0,1
    count = 0
    while count < num:
        count += 1
        tmp = b     #也可以写成a,b=b,a+b
        b = a + b
        a = tmp
        yield a     #返回a, 同时挂起当前这个函数, a返回给了通过__next__()调用当前函数的人
        # return a
    else:print("done")

f = fob(1000000)

for i in range(10):
    print(f.__next__())

  

迭代器

>>> from collections import Iterator
>>> isinstance((x for x in range(10)), Iterator)
True
>>> isinstance([], Iterator)
False
>>> isinstance({}, Iterator)
False
>>> isinstance(‘abc‘, Iterator)
False

  

#list、dict、str虽然是Iterable,却不是Iterator。通过iter()函数,可以把list、dict、str等Iterable变成Iterator使用
>>> isinstance(iter([]), Iterator)
True
>>> isinstance(iter(‘abc‘), Iterator)
True

  




 

列表生成式、生成器、迭代器

标签:bsp   函数   int   ble   pre   return   iterator   instance   使用   

原文地址:http://www.cnblogs.com/fengdao/p/6057537.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!