杨辉三角(生成器generator)

生成器:(Python中,这种一边循环一边计算的机制,称为生成器:generator)

创建generator的方法:

1.把列表生成式的[]变为(),就创建了一个generator

例:

可以通过next()获得generator得下一个返回值

遍历的话可以直接用:

for i in g:

print(i)

2.将函数中的print(b)改为yield b,如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator

 

杨辉三角,期待输出效果:

[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]

代码:

def triangles(max):   
    n,l = 0,[]
    while n <max:
        a=0
        k=[]     
        for i in l:          
            k.append(a+i)        
            a=i
        k.append(1)
        print(k)
        l=k
        n = n+1

if __name__=="__main__":
    triangles(5)

生成器方式

def triangles(max):   
    n,l = 0,[]
    while n <max:
        a=0
        k=[]     
        for i in l:          
            k.append(a+i)        
            a=i
        k.append(1)
        yield k
        l=k
        n = n+1
if __name__=="__main__":
    for t in triangles(5):
        print(t)

时间: 2024-10-09 16:40:23

杨辉三角(生成器generator)的相关文章

杨辉三角--生成器版

# 杨辉三角 def triangle(): li = [1] while True: yield li lis = [] lis.extend([li[0]]) for j in range(len(li)-1): lis.append((li[j]+li[j+1])) else: lis.extend([li[0]]) li = lis tri_list = triangle() for i in range(10): print(next(tri_list)) 原文地址:https://w

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

1 #! usr/bin/env python3 2 #-*- coding :utf-8 -*- 3 print('杨辉三角的generator') 4 def triangles(): 5 6 N=[1] 7 while True : 8 yield N 9 N.append(0) 10 N = [N[i-1]+N[i] for i in range(len(N)) ] 11 12 triangles = triangles() 13 for j in range(10): 14 print

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

列表生成式 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, Iterab

python生成器实现杨辉三角

1 def triangels(): 2 """ 3 杨辉三角 4 """ 5 lst = [1] 6 n_count = 2 # 下一行列表长度 7 while True: 8 yield lst 9 lst_n = list(range(0 ,n_count)) 10 lst = [1] + [lst[i-1]+lst[i] for i,v in enumerate(lst_n) if i!=0 and i!=n_count-1] + [1]

一个超强的杨辉三角python实现方法

廖雪峰Python教程——生成器 有这么一个习题: 练习 杨辉三角定义如下: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 把每一行看做一个list,试写一个generator,不断输出下一行的list: # -*- coding: utf-8 -*- def triangles(): 在评论里发现这么一个强大的答案: 1 N = [1] 2 while True: 3 yield N 4 N.append(0) 5 N = [N[i-1] + N[i]

[py]函数中yield多次返回,延迟计算特性-杨辉三角

搞清什么是杨辉三角 每行是一个数组, 第一行: [1] 第二行: [1, 1] 第三行: [1, 2, 2, 1] ... 画的好看点就是,不过没啥卵用 1 / 1 1 / \ / 1 2 1 / \ / \ / 1 3 3 1 / \ / \ / \ / 1 4 6 4 1 / \ / \ / \ / \ / 1 5 10 10 5 1 打印杨辉三角 首先要解决一个函数,多次返回值, 我们知道py函数返回多个值,没啥问题. 但是要多次返回值呢?需要借助生成器来完成, 生成器的好处是可以保留现场

Python实现:杨辉三角思路

 杨辉三角有以下几个特点 : 每个数等于它上方两数之和. 每行数字左右对称,由1开始逐渐变大. 第n行的数字有n项. 第n行数字和为2n-1. 第n行的m个数可表示为 C(n-1,m-1),即为从n-1个不同元素中取m-1个元素的组合数. 第n行的第m个数和第n-m+1个数相等 ,为组合数性质之一. 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 我的思路是由于第一行只有一个元素1,所以第二行也一定是1.所以重点在计算后面几行输出的数字,先把它输进列表.

leetcode 118 杨辉三角 python

杨辉三角 一开始自己使用的方法 1 class Solution: 2 def generate(self, numRows): 3 """ 4 :type numRows: int 5 :rtype: List[List[int]] 6 """ 7 if numRows == 0: 8 return [] 9 elif numRows == 1: 10 return [[1]] 11 elif numRows == 2: 12 return [

LeetCode (13) Pascal&#39;s Triangle (杨辉三角 )

题目描述 Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows = 5, Return 从第三行开始,每行除了最左边和最右边两个数为1,其他数字都是上一行中相邻两个数字之和.根据上述规则可以写出下面的代码: class Solution { public: vector<vector<int> > generateRow1() { vector<in