一、递归yield使用

可把yield当做return,其作用是把一个函数变成一个迭代器。

1、嵌套列表展开

  1. def flatten(nested):
  2. if type(nested)==list:
  3. for sublist in nested:
  4. for i in flatten(sublist):
  5. yield i
  6. else:
  7. yield nested
  8. print(list(flatten([[[1],2],3,4,[5,[6,7]],8])))
  9.  
  10. #结果为[1,2,3,4,5,6,7,8]

2、树的后序遍历

  1. def postorderTraversal(self, root):
  2. def iter(root):
  3. if root:
  4. for x in iter(root.left):
  5. yield x
  6. for x in iter(root.right):
  7. yield x
  8. yield root.val
  9. return list(iter(root))

2、建立所有的二叉搜索树

给定一个数n,从【1,2,……,n】能够建立多少棵不同的二叉搜索树

  1. class TreeNode:
  2. def __init__(self,root):
  3. self.val=root
  4. self.left=None
  5. self.right=None
    #用生成器建立所有树
  6. def builtTree(start,end):
  7. if start>end:
  8. yield None
  9. for j in range(start,end+1):
  10. for j_left in builtTree(start,j-1):
  11. for j_right in builtTree(j+1,end):
  12. root=TreeNode(j)
  13. root.left=j_left
  14. root.right=j_right
  15. yield root
    #调用建树函数
  16. def test(n):
  17. if n==0:
  18. return []
  19. return list(builtTree(1,n))

 2、二叉搜索树按序输出

  1. class BSTIterator(object):
  2. def __init__(self, root):
  3. """
  4. :type root: TreeNode
  5. """
  6. self.stack=[]
  7. while root:
  8. self.stack.append(root)
  9. root=root.left
  10.  
  11. def hasNext(self):
  12. """
  13. :rtype: bool
  14. """
  15. return len(self.stack)>0
  16.  
  17. def next(self):
  18. """
  19. :rtype: int
  20. """
  21. node=self.stack.pop()
  22. x=node.right
  23. while x:
  24. self.stack.append(x)
  25. x=x.left
  26. return node.val

二、itertools

1、chain():

把一组迭代对象串联起来,形成一个更大的迭代器

若在多个对象执行相同的操作,但这些对象在不同的容器中,如果希望代码在不
失可读性的情况下避免写重复的循环

  1. from itertools import chain
  2.  
  3. for c in itertools.chain('ABC', 'XYZ'):
  4. print(c)
  5. # 迭代效果:'A' 'B' 'C' 'X' 'Y' 'Z'
  6.  
  7. a = [1, 2, 3, 4]
  8. b = [‘x’, y’, z’]
  9. for x in chain(a, b):
  10. print(x)
  11.  
  12. #迭代结果:1,2,3,4,'x','y','z'

Python笔记24-----迭代器、生成器的使用(如嵌套列表的展开、树的遍历等)的更多相关文章

  1. 【python】Leetcode每日一题-扁平化嵌套列表迭代器

    [python]Leetcode每日一题-扁平化嵌套列表迭代器 [题目描述] 给你一个嵌套的整型列表.请你设计一个迭代器,使其能够遍历这个整型列表中的所有整数. 列表中的每一项或者为一个整数,或者是另 ...

  2. python各种模块,迭代器,生成器

    从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能) 本质就是.py结尾的python文件(文件名:test.py,对应的模块名就是test) 包:用来从逻辑上组织模块的,本质就是一个目 ...

  3. python杂记-4(迭代器&生成器)

    #!/usr/bin/env python# -*- coding: utf-8 -*-#1.迭代器&生成器#生成器#正确的方法是使用for循环,因为generator也是可迭代对象:g = ...

  4. Python学习 :迭代器&生成器

    列表生成式 列表生成式的操作顺序: 1.先依次来读取元素 for x 2.对元素进行操作 x*x 3.赋予变量 Eg.列表生成式方式一 a = [x*x for x in range(10)] pri ...

  5. python学习笔记(5)--迭代器,生成器,装饰器,常用模块,序列化

    生成器 在Python中,一边循环一边计算的机制,称为生成器:generator. 如: >>> g = (x * x for xin range(10)) >>> ...

  6. python基础6 迭代器 生成器

    可迭代的:内部含有__iter__方法的数据类型叫可迭代的,也叫迭代对象实现了迭代协议的对象 运用dir()方法来测试一个数据类型是不是可迭代的的. 迭代器协议是指:对象需要提供next方法,它要么返 ...

  7. python中的迭代器&&生成器&&装饰器

    迭代器iterator 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束. 迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外, ...

  8. Python入门之迭代器/生成器/yield的表达方式/面向过程编程

    本章内容 迭代器 面向过程编程 一.什么是迭代 二.什么是迭代器 三.迭代器演示和举例 四.生成器yield基础 五.生成器yield的表达式形式 六.面向过程编程 ================= ...

  9. python中的迭代器 生成器 装饰器

    什么迭代器呢?它是一个带状态的对象,他能在你调用next()方法的时候返回容器中的下一个值,任何实现了__iter__和__next__()(python2中实现next())方法的对象都是迭代器,_ ...

随机推荐

  1. Django:URL,Views,Template,Models

    准备工作:熟悉Django命令行工具 django-admin.py 是Django的一个用于管理任务的命令行工具,常用的命令整理如下: <1> 创建一个django工程 : django ...

  2. 【BZOJ4864】【BJWC2017】神秘物质 - Splay

    题意: Description 21ZZ 年,冬.小诚退休以后, 不知为何重新燃起了对物理学的兴趣. 他从研究所借了些实验仪器,整天研究各种微观粒子.这一天, 小诚刚从研究所得到了一块奇异的陨石样本, ...

  3. [tyvj-1061]Mobile Service 动态规划

    滚动数组优化一波. 原设计状态:表示三个员工分别的位置和执行到的任务. 考虑到:执行完第i个任务,一定有员工在pos[i],那么就可以压一维,空间复杂度就算不滚动数组也可以了. (喜闻乐见,今天第一次 ...

  4. 地图API示例

    http://developer.baidu.com/map/jsdemo.htm#i6_2

  5. Top English interview Q&A

    http://www.hjenglish.com/new/p581292/ vocabulary endeavour [ɪn'devər] relevant ['reləvənt] , efficie ...

  6. uni-app 之验证码

    手机APP---验证码 最近公司在开发手机APP,app避不可免的就是登录了,emmmm 登录验证码那必须的是有的,我们公司发给我们的图片是酱紫的~~ 这个要求大家应该都能看懂,做这个手机号啊,验证码 ...

  7. C# string bytes互转

    string str = "spike"; byte[] bytes = System.Text.Encoding.Default.GetBytes(str); foreach ( ...

  8. Spring Boot 第一个demo

    Sring boot  一直没有使用过,跳槽来到新公司,暂时没有事情就学习一下. Spring boot  这里采用的是maven 来创建的 maven项目的pom.xml 文件 <?xml v ...

  9. java中File的delete()方法删除文件失败的原因

    java中File的delete()方法删除文件失败的原因 学习了:http://hujinfan.iteye.com/blog/1266387 的确是忘记关闭了: 引用原文膜拜一下: 一般来说 ja ...

  10. 嵌入式linux和pc机的linux对照

    linux本身具备的非常大长处就是稳定,内核精悍,执行时须要的资源少.嵌入式linux和普通linux并无本质差别. 在嵌入式系统上执行linux的一个缺点就是其核心架构没有又一次设计过,而是直接从桌 ...