python实现杨辉三角
刚刚学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实现杨辉三角的更多相关文章
- 利用python打印杨辉三角
用python打印杨辉三角 介绍 杨辉三角,是初高中时候的一个数列,其核心思想就是说生成一个数列,该数列中的每一个元素,都是之前一个数列中,同样位置的元素和前一个元素的和. 正好在python中,也就 ...
- python 实现杨辉三角(依旧遗留问题)
1 #! usr/bin/env python3 #-*- coding :utf-8 -*- print('杨辉三角的generator') def triangles(): N=[1] while ...
- Python之杨辉三角算法实现
学习了廖雪峰的官方网站的python一些基础,里面有个题目,就是让写出杨辉三角的实现,然后我就花了时间实现了一把.思路也很简单,就是收尾插入0,然后逐层按照杨辉三角的算法去求和实现杨辉三角. 附属代码 ...
- python输出杨辉三角
使用python列表,展示杨辉三角 # !/usr/bin/env python # -*- coding:utf-8 -*- # Author:Hiuhung Wan yanghui = [] fo ...
- Python实现杨辉三角,超详细!
巧妙实现杨辉三角代码 def triangles(): N=[1] #初始化为[1],杨辉三角的每一行为一个list while True: yield N #yield 实现记录功能,没有下一个ne ...
- python的杨辉三角
# # / \ # # / \ / \ # # / \ / \ / \ # # / \ / \ / \ / \ # # / \ / \ / \ / \ / \ # # ---------------- ...
- 用python实现杨辉三角
def yanghui(lines): currentlst,lastlst,n=[],[],1 if lines<1: return while n<=lines: lastlst=cu ...
- python 生成器生成杨辉三角
用Python写趣味程序感觉屌屌的,停不下来 #生成器生成展示杨辉三角 #原理是在一个2维数组里展示杨辉三角,空的地方用0,输出时,转化为' ' def yang(line): n,leng=0,2* ...
- 【Python初级】由生成杨辉三角代码所思考的一些问题
杨辉三角定义如下: 1 / \ 1 1 / \ / \ 1 2 1 / \ / \ / \ 1 3 3 1 / \ / \ / \ / \ 1 4 6 4 1 / \ / \ / \ / \ / \ ...
随机推荐
- Confluence 6 查看系统属性
当你添加了内存,设置了代理(proxy)或者修改了 Java 的选项,通常比较难判断系统是否已经按照你的修改进行了配置和启动.这个页面将会帮助你查看 Confluence 站点运行使用的系统属性. 你 ...
- Confluence 6 系统运行信息中的 JVM 内存使用情况
当前一个正在运行的 Confluence 6 实例的内存使用情况 https://www.cwiki.us/display/CONF6ZH/Viewing+System+Information
- Guideline 5.2.1 - Legal - Intellectual Property 解决方案
最近在上架公司公司项目的时候遇到这个问题什么5.2.1 然后去了解发现最近不少人都遇到了这个问题.先说一下 我上架的APP是一个医疗的APP然后说需要什么医疗资质,估计是账号的公司资质不够吧.后面和苹 ...
- html 基本指令
命令: <pre> </pre> 格式化输出 <ol></ol> 有序 HTML 列表:示例: <pre> here is outout & ...
- selenium 操作复选框
场景 从上一节的例子中可以看出,webdriver可以很方便的使用findElement方法来定位某个特定的对象,不过有时候我们却需要定位一组对象, 这时候就需要使用findElements方法. 定 ...
- IDEA快捷键之for循环
intelliJ生成for循环代码. 迭代器for循环 iter Iterate iterable | Array in J2SDK 5 syntax itar Iterate elements of ...
- MySQL查看库表的大小
MySQL数据库空间使用情况查询 如果想知道MySQL数据库中每个表占用的空间.表记录的行数的话,可以打开MySQL的 information_schema 数据库.在该库中有一个 TABLES 表, ...
- Android之Error: 'L' is not a valid file-based resource name character解决办法
1.问题 Error:Execution failed for task ':mergeBYODReleaseResources'.> /home/chenyu/Android_dev/sang ...
- As/IDEA json自动生成java bean
1.先安装GsonFormat插件:File-->Setting-->Plugins-->GsonFormat-->OK 2.new 一个新的Class空文件,然后 Alt+I ...
- zookeeper都有哪些使用场景
分布式协调 这个其实是zk很经典的一个用法,比如,A系统发送个请求到mq,然后B拿到消息消费之后处理了.那A系统如何知道B系统的处理结果? 用zk就可以实现分布式系统之间的协调工作.A系统发送请求之后 ...