列表生成式

print('昨日复习--------------------')
d = {'a':1, 'b':2, 'c':3}
for key in d:print(key)for value in d.values():print(value)for k, v in d.items():print(k, v)for ch in 'ABC':print(ch)from collections import Iterable
t = isinstance(123, Iterable) #检查是否可迭代,返回值为布尔类型的
print(t)for i, value in enumerate(['A', 'B', 'C']):print(i, value)for x, y in [(1, 1), (2, 4), (3, 9)]:print(x, y)L = list(range(100))
print(L)

构建生成器

print('构建生成器--------------------')
#通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。#所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。
L = [x*x for x in range(10)]
print(L)
G = (x * x for x in range(10))
print(G)
#如果要一个一个打印出来,可以通过next()函数获得generator的下一个返回值:
print(next(G))
print(next(G))
print(next(G))
print(next(G))
print(next(G))
print(next(G))
0
1
4
9
16
25
#上面这种不断调用next(g)实在是太变态了,正确的方法是使用for循环,因为generator也是可迭代对象:
g = (x*x for x in range(10))
for n in g:print(n)

用函数实现生成器

print('用函数实现生成器--------------------')#generator非常强大。如果推算的算法比较复杂,用类似列表生成式的for循环无法实现的时候,还可以用函数来实现。
def fib(max):n, a, b = 0, 0, 1while n < max:print(b)a, b = b, a+bn = n + 1return 'done'
#上面的函数可以输出斐波那契数列的前N个数:
t = fib(6)
print(t)
#也就是说,上面的函数和generator仅一步之遥。要把fib函数变成generator,只需要把print(b)改为yield b就可以了:
def fib(max):n, a, b = 0, 0, 1while n < max:yield(b)a, b = b, a+bn = n + 1return 'done'
fib(11) #这句话没有执行结果,可以用一个参数接收返回值,然后输出
#这就是定义generator的另一种方法。如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator:
f = fib(6)
print(f)
#<generator object fib at 0x104feaaa0>
print('--------------------')#这里,最难理解的就是generator和函数的执行流程不一样。函数是顺序执行,遇到return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。#举个简单的例子,定义一个generator,依次返回数字1,3,5:
def odd():print('step 1')yield 1print('step2')yield(3)print('step 3')yield 5o = odd()
print('next输出odd生成器内容--------------------')
print(next(o))
print(next(o))
print(next(o))
print('迭代输出fib生成器内容--------------------')
for n in fib(6):print(n)
print('输出带返回值的生成器的所有内容----------')#但是用for循环调用generator时,发现拿不到generator的return语句的返回值。如果想要拿到返回值,必须捕获StopIteration错误,返回值包含在StopIteration的value中:
g = fib(6)
while(True):try:x = next(g)print('g:', x)except StopIteration as e:print('Generator return value:', e.value)break;

杨辉三角的输出

print('杨辉三角的输出-----------------')
#天啊, 这代码,太精辟,我无话可说def fun(n):N = [1]t = 0while t < n:yield(N)t = t + 1N.append(0)N = [N[i-1] + N[i] for i in range(len(N))]for i in fun(6):print(i)
#在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。
#执行过程大概如下
N = 1N = 1, 0N = 1, 1N = 1, 1, 0N = 1, 2, 1N = 1, 2, 1, 0N = 1, 3, 3, 1N = 1, 3, 3, 1, 0N = 1, 4, 6, 4, 1#………………………………

补充:

找出一个数据的类型的方法

a = 1
print(type(a))
#<class 'int'>

转载于:https://www.cnblogs.com/rain-1/p/5547282.html

列表生成式的复习以及生成器的练习, 杨辉三角实例(非常巧妙)相关推荐

  1. python生成器杨辉三角_python 生成器生成杨辉三角的方法(必看)

    用Python写趣味程序感觉屌屌的,停不下来 #生成器生成展示杨辉三角 #原理是在一个2维数组里展示杨辉三角,空的地方用0,输出时,转化为' ' def yang(line): n,leng=0,2* ...

  2. 快速记忆python函数-【速学速记】Python 列表生成式的进化:生成器

    原标题:[速学速记]Python 列表生成式的进化:生成器 1. 列表生成式的缺点 通过列表生成式,我们可以直接创建一个列表.但是,内存数量有限,列表容量肯定不能超过内存大小. 再有,创建一个包含10 ...

  3. Python打印杨辉三角-生成器语法yield的理解

    ###先看代码. def triangles():# 定义最初的数据 1 ,存到列表中lt = [1]# 进入循环while True:# 使用yield语句产生一个生成器,返回当前列表yield l ...

  4. 兔子数列python编程分析_九九乘法,兔子数列,杨辉三角|用Python生成器的妙解...

    很多同学还是对生成器的用法,感到怀疑,特别是有其他语言基础的同学,一下子很难理解和转换过来,那什么情况下会用到yield,建议是当需要在循环过程中依次处理一个序列中的元素的时候,就应该考虑生成器,其实 ...

  5. Python 中使用 for、while 循环打印杨辉三角练习(列表索引练习)。

    Python中使用for while循环打印杨辉三角练习(列表索引练习). 杨辉三角是一个由数字排列成的三角形数表,一般形式如下: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 ...

  6. 【C】杨辉三角生成式

    杨辉三角生成式 一.问题 [问题描述] [输入形式] [输出形式] [样例] 二.思路 三.源码 四.扩展阅读 一.问题 [问题描述] 输入整数 n,输出杨辉三角前 (n+1) 行 [输入形式] 从键 ...

  7. 利用列表巧妙打印杨辉三角

    Python中的列表(list) 在python中,列表的重要性不亚于C语言中的数组,用好python中的列表对提升编程能力以及提高程序效率很有帮助.下面就介绍几种用列表实现杨辉三角的方法. 方法一: ...

  8. python之路-列表生成式、迭代器、生成器、装饰器

    1.列表生成式,迭代器&生成器 列表生成式 我现在有个需求,看列表[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],我要求你把列表里的每个值加1. 普通版 a = [0,1,2,3 ...

  9. [廖雪峰python教程列表生成器练习]杨辉三角定义如下,把每一行看做一个list,试写一个generator,不断输出下一行的list

    杨辉三角定义如下: 1/ \1 1/ \ / \1 2 1/ \ / \ / \1 3 3 1/ \ / \ / \ / \1 4 6 4 1/ \ / \ / \ / \ / \ 1 5 10 10 ...

最新文章

  1. CentOS 6.3 64bit 搭建vsFTP服务
  2. 【redis】使用 URI 配置 redis
  3. 数字图像处理频域滤波实现低通与高通滤波(包含matlab代码)
  4. 走进webpack(1)--环境拆分及模块化
  5. Python工程师必看的面试问题与解答(中) 1
  6. 《消费者报告》下调特斯拉Model 3安全评级
  7. 【论文笔记】 ICRA 2021 通用无监督激光里程计 Self-supervised Learning of LiDAR Odometry for Robotic Applications
  8. 最全公司章程自由规定事项
  9. 随心所遇,随遇而安。
  10. 智能管家App kotlin版——开发索引
  11. 第十七节:通信之WLAN(WPA3-Ⅰ)
  12. 关于RFID电感耦合方式的射频前端工作原理,你了解吗?
  13. 汇编程序设计-11-AX、BX、CX、DX寄存器
  14. ZXing改横屏识别为竖屏识别
  15. CSS:使用线性渐变实现标签右上角三角形角标效果/HTML上标、下标
  16. 动网php_动网论坛PHP增强版(动网论坛PHP2.0++官方下载)V2.0官方版下载 - 下载吧...
  17. html中自动换行的代码,css之自动换行实现代码
  18. IE 浏览器有多烂?第一个就给跪了···
  19. rk3399 usbwifi 调试命令
  20. python 经典练习题一

热门文章

  1. flask Flash消息
  2. Pandas GroupBy对象
  3. Windows server 2016远程桌面登录和修改3389端口
  4. Forrester报告拆解:强劲冲击第一梯队后,京东智联云站稳云市场新格局
  5. 项目管理学习总结(3)——产品文档的规划化管理总结
  6. Java基础学习总结(90)——Java单元测试技巧
  7. Windows学习总结(9)——Windows系统常用的网络控制指令
  8. 大型网站技术架构(五)网站高可用架构
  9. Python入门之PyCharm中目录directory与包package的区别
  10. 拆轮子系列--RxJava理解(一)--Map解析