python实现杨辉三角

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

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

咱们都知道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'>

可是列表的大小受内存的限制,若是咱们能记录产生数据的算法,那么就不用构造完整的列表,只须要边循环边产生数据。函数

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

# 建立一个简单的生成器
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()函数进行遍历code

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

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

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

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语句处继续执行。

 下面来实现杨辉三角:内存

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

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
相关文章
相关标签/搜索