python写杨辉三角形_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)) #

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

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

#创建一个简单的生成器

gen = (x * x for x in range(10))print(type(gen)) #

for item ingen: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)) #

print(next(gen)) #0

print(next(gen)) #1

print(next(gen)) #4

print(next(gen)) #9

print(next(gen)) #16

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

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

defgen_func():

n= 1

whileTrue:yield n * 2 - 1 #程序运行到yield会中断一次,下次再执行时从上次中断位置开始

n += 1f=gen_func()print(type(f)) #

n = 1 #控制打印次数

for item inf:print(item, end=" ") #1 3 5 7 9 11 13 15 17

n += 1

if n == 10:break

生成器和函数的执行流程不一样。

函数是顺序执行,遇到return语句或最后一行语句时返回。

生成器是在每次调用next()时候执行,遇到yield语句时返回,当再次调用next()时,从上次返回的yield语句处继续执行。

下面来实现杨辉三角:

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

deftriangle():

line= [1] #第一行就一个元素1

whileTrue:yieldline#生成下一行,表达式为 : [1] + 上一行的两个元素之和 + [1]

line = [1] + [line[i] + line[i + 1] for i in range(len(line) - 1)] + [1]

n= 0 #控制输出行数

for item intriangle():print(item)

n+= 1

if n % 10 ==0:break

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值