zoukankan      html  css  js  c++  java
  • 例子:列表--杨辉三角

    首先需要了解一下什么是杨辉三角,如下图所示:

     方法一:计算杨辉三角的前6行

     1 yang = []
     2 # 首先创建一个空列表yang
     3 for i in range(6):
     4 # 循环6次输出前6行,range是从0开始的
     5     row = [1]
     6 # 建一个只包含1的列表row,并且每次循环都重新定义
     7     yang.append(row)
     8 # 将列表row作为元素添加到列表yang里面
     9     if i == 0:
    10         continue
    11 # 这里是第一行的输出,第一行只有一个1,作为特殊情况
    12     for j in range(i-1):
    13         row.append(yang[i-1][j] + yang[i-1][j+1])
    14 # yang[i-1][j],yang列表的元素是列表row
    15 # 这里的意思是yang列表的第i-1个元素的j元素
    16     row.append(1)
    18 print(yang)
    19 ##############################################
    20 D:untitledproject2venvScriptspython.exe D:/untitled/project2/day1/yanghui.py
    21 [[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1], [1, 5, 10, 10, 5, 1]]
    22 
    23 Process finished with exit code 0

    当i取0的时候,row=[1],yang=[[1]],continue跳出当前循环;i开始取1,row=[1],yang=[[1],[1]],j依旧不会取值,不执行row.append(yang[i-1][j] + yang[i-1][j+1]),执行row.append(1),即前面的row=[1]的尾部追加一个1(虽然row=[1]已经被追加到了yang列表里面),所以yang=[[1],[1]]就变成了yang=[[1],[1,1]];i开始取2,row=[1],yang=[[1],[1,1],[1]],j取值0,执行row.append(yang[i-1][j] + yang[i-1][j+1]),即row.append(yang[1][0] + yang[1][1])即row.append(1+1)即row.append(2),yang列表变成[[1],[1,1],[1,2]],然后row.append(1),yang就变成了[[1],[1,1],[1,2,1]]……如此循环。

    方法二:

     1 n = 6
     2 oldline = []
     3 newline = [1]
     4 length = 0
     5 print(newline)
     6 for i in range(1,n):
     7     oldline = newline.copy()
     8     oldline.append(0)
     9     newline.clear()
    10     offset = 0
    11     while offset <= i:
    12         newline.append(oldline[offset-1] + oldline[offset])
    13         offset += 1
    14     print(newline)
    15 #########################################
    16 D:untitledproject2venvScriptspython.exe D:/untitled/project2/day1/teryer.py
    17 [1]
    18 [1, 1]
    19 [1, 2, 1]
    20 [1, 3, 3, 1]
    21 [1, 4, 6, 4, 1]
    22 [1, 5, 10, 10, 5, 1]
    23 
    24 Process finished with exit code 0
    #代码10行~11行,可以替换成以下的代码:
    #for offset in range(i+1)

    凑0的想法,负索引。第一行为特殊情况(即i=0的时候),独自输出(即代码第3行和第5行);然后i=1的时候,oldline=newline=[1],然后oldline.append(0),oldline=[1,0],newline.clear()清空变成[],设定一个变量offset初始值为0,offset与i的关系就是第i行重复offset次,共计打offset个数值,offset取0时,newline.append(oldline[offset-1] + oldline[offset])即newline.append(oldline[-1] + oldline[0])即newline.append(0+1)即newline.append(1)(PS:这里用到了负索引的概念),然后newline从[]变为[1]。offset取1时,newline.append(oldline[offset-1] + oldline[offset])即newline.append(oldline[0] + oldline[1])即newline.append(1+0)即newline.append(1),然后newline从[1]变为[1,1]……如此循环。

    方法三:

  • 相关阅读:
    简单的结账功能(可用于各种结账)
    有关菜单进行“估清”的功能
    在线客服~~
    在windows下安装GIT
    GIT之二 基础篇(2)
    简单模仿javascript confirm方法的例子
    微信公众平台开发 第三篇
    微信公众平台开发 第二篇
    微信公众平台开发 第一篇
    GIT之二 基础篇(1)
  • 原文地址:https://www.cnblogs.com/linfengs/p/11686805.html
Copyright © 2011-2022 走看看