您的位置:首页 > 编程语言 > Python开发

python 基础教程之迭代

2014-08-16 20:18 162 查看
python的迭代相当的强大,也非常的好用。

迭代:

简单迭代:

最常见的迭代也就是for循环了

for i in range(10)
      print i
它可以遍历列表,元组,字典

并行迭代:

names = ['anna', 'beth', 'tom']
ages  = ['19', '24', '27']
for name,age in zip(names,ages)
      print name,' is ',age,' years old!'


列表推导式:

列表推导式是用列表创建新列表

比如:

[ x*x for x in range(4)]  #[0, 1, 4, 9]
[ x*x for x in range(4) if x%3 == 0]  #[0, 9, 36, 81]
[ (x,y) for x in range(2) for y in range(2)] #[(0,0), (0,1), (1,0), (1,1)]


迭代器:

迭代器,实现__iter__特殊方法是可迭代,实现了next则是迭代器,不只在元组和字典中,而且更优雅,更推荐

class fibs:
    def __init__(self):
        self.a = 1
        self.b = 1

    def next(self):
        self.a, self.b = self.b, self.a + self.b
        if self.a > 27000:raise StopIteration #------------从迭代器中得到序列
        return self.a

    def __iter__(self):
        return self

if __name__ == '__main__':

    fibs = fibs()
    for f in fibs:
        print f

    fList = list(fibs) #使用list将迭代器转化为列表
    print fList

    #对于内建的iter函数,可以从对象中获取元素,实例
    it = iter([5, 6, 1, 2, 9])
    print it.next()
    print it.next()


生成器:

任何包含yield语句的函数被称为生成器,它不像return那样返回值,而是每次产生多个值,每次产生一个值,函数就会被冻结:即函数停在那点等待被激活,函数被激活后就从停止的那点开始执行。(类似中断)

看实例:

def flatten(nested):
    for sublist in nested:
        for element in sublist:
            yield element

nested = [[3, 4], [1, 5], [2]]
for num in flatten(nested):
    print num                  # 输出 3 4 1 5 2


递归生成器:

def flatten(nested):
   try:
       for sublist in nested:
           for element in flatten(sublist):
              yield element
   except TypeError:
        yield mested

nested = [[3, [7, [4,[8]]]], [1, 5], [2]]
for num in flatten(nested):
    print num                  # 输出 3 7 4 8 1 5 2
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: