刚刚学python,原来用c++,Java很轻松实现的杨辉三角,现在用python实现,代码是少了,理解起来却不容易啊。

这里主要用到的Python的生成器。

我们都知道Python有列表解析功能,根据表达式可以自动生成列表,如:

# 这样就得到了0-9这几个数的平方
my_list = [x**2 for x in range(10)]
print(my_list) # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
print(type(my_list)) # <class 'list'>

但是列表的大小受内存的限制,如果我们能记录产生数据的算法,那么就不用构造完整的列表,只需要边循环边产生数据。

下面就来创建一个简单的生成器:

# 创建一个简单的生成器
gen = (x * x for x in range(10))
print(type(gen)) # <class 'generator'>
for item in gen:
print(item, end=" ") # 0 1 4 9 16 25 36 49 64 81

除了用for遍历生成器对象,还可以用next()函数进行遍历

# 创建一个简单的生成器
gen = (x * x for x in range(10))
print(type(gen)) # <class 'generator'>
print(next(gen)) #
print(next(gen)) #
print(next(gen)) #
print(next(gen)) #
print(next(gen)) #

当没有更多元素用于遍历时,会抛出StopIteration异常

当函数中有yield关键字时,函数会变成生成器:

def gen_func():
n = 1
while True:
yield n * 2 - 1 # 程序运行到yield会中断一次,下次再执行时从上次中断位置开始
n += 1 f = gen_func()
print(type(f)) # <class 'generator'>
n = 1 # 控制打印次数
for item in f:
print(item, end=" ") #1 3 5 7 9 11 13 15 17
n += 1
if n == 10:
break
  • 生成器函数的执行流程不一样。
  • 函数是顺序执行,遇到return语句或最后一行语句时返回。
  • 生成器是在每次调用next()时候执行,遇到yield语句时返回,当再次调用next()时,从上次返回的yield语句处继续执行。

下面来实现杨辉三角:

思路是初始化第一行的元素列表,依次生成下一行的元素列表

def triangle():
line = [1] # 第一行就一个元素1
while True:
yield line
# 生成下一行,表达式为 : [1] + 上一行的两个元素之和 + [1]
line = [1] + [line[i] + line[i + 1] for i in range(len(line) - 1)] + [1] n = 0 # 控制输出行数
for item in triangle():
print(item)
n += 1
if n % 10 == 0:
break

python实现杨辉三角的更多相关文章

  1. 利用python打印杨辉三角

    用python打印杨辉三角 介绍 杨辉三角,是初高中时候的一个数列,其核心思想就是说生成一个数列,该数列中的每一个元素,都是之前一个数列中,同样位置的元素和前一个元素的和. 正好在python中,也就 ...

  2. python 实现杨辉三角(依旧遗留问题)

    1 #! usr/bin/env python3 #-*- coding :utf-8 -*- print('杨辉三角的generator') def triangles(): N=[1] while ...

  3. Python之杨辉三角算法实现

    学习了廖雪峰的官方网站的python一些基础,里面有个题目,就是让写出杨辉三角的实现,然后我就花了时间实现了一把.思路也很简单,就是收尾插入0,然后逐层按照杨辉三角的算法去求和实现杨辉三角. 附属代码 ...

  4. python输出杨辉三角

    使用python列表,展示杨辉三角 # !/usr/bin/env python # -*- coding:utf-8 -*- # Author:Hiuhung Wan yanghui = [] fo ...

  5. Python实现杨辉三角,超详细!

    巧妙实现杨辉三角代码 def triangles(): N=[1] #初始化为[1],杨辉三角的每一行为一个list while True: yield N #yield 实现记录功能,没有下一个ne ...

  6. python的杨辉三角

    # # / \ # # / \ / \ # # / \ / \ / \ # # / \ / \ / \ / \ # # / \ / \ / \ / \ / \ # # ---------------- ...

  7. 用python实现杨辉三角

    def yanghui(lines): currentlst,lastlst,n=[],[],1 if lines<1: return while n<=lines: lastlst=cu ...

  8. python 生成器生成杨辉三角

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

  9. 【Python初级】由生成杨辉三角代码所思考的一些问题

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

随机推荐

  1. Confluence 6 修改特定的空间标识图片

    空间管理员可以为他们管理的空间修改空间标识图片.这个修改将会覆盖默认的空间标识图片,任何对默认空间图标表示的修改将不会对已经修改的空间标识图片产生影响.请查看上面的例子中的 'Sample Space ...

  2. vue-cli脚手架(框架)

    一.创建vue项目 npm install vue-cli -g #-g全局 (sudo)npm install vue-cli -g #mac笔记本 vue-init webpack myvue # ...

  3. 添加按钮 table增加一行 删减按钮 table去掉一行

    需求描述:做的一个AA新增功能,同时可以为这个即将新增的AA添加内容,而且AA的内容默认展示一行列表,点击添加按钮后出现下一行列表 解决思路:页面首先展示一个表头和列表的一行,作为默认展示的一行列表, ...

  4. tp3.2 事务

    public function exchangeTransfer($user_id, $type, $money, $config, $other_id = 0) { $r['code'] = ERR ...

  5. You are my brother

    问题 : You are my brother 时间限制: 1 Sec  内存限制: 128 MB 题目描述 Little A gets to know a new friend, Little B, ...

  6. Unet 项目部分代码学习

    github地址:https://github.com/orobix/retina-unet 主程序: ################################################ ...

  7. 微信小程序--WXS---JS 代码插入

    主页要使用的JS代码放在index.js里面 例 Page({ data: { array: [1, 2, 3, 4, 5, 1, 2, 3, 4] } }) 只复制以下这段 data: { arra ...

  8. 【C++ Primer | 11】关联容器(一)

    在multimap或multiset中查找元素 第二种方法解释: #include <iostream> #include <utility> #include <ite ...

  9. Nancy 自寄宿

    一:简介 Self Hosting 顾名思义,就是自己Host自己.也就是不需要依赖别的应用,而让应用本身就是服务.一个Console程序或者一个Winform程序都是一个应用,Self Hostin ...

  10. MyBatis-Plus工具快速入门

    MyBatis-Plus官方文档:http://mp.baomidou.com/#/quick-starthttp://mp.baomidou.com/guide/#%E7%89%B9%E6%80%A ...