例子:列表--杨辉三角

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

方法一:计算杨辉三角的前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:\untitled\project2\venv\Scripts\python.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:\untitled\project2\venv\Scripts\python.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]……如此循环。

方法三:

原文地址:https://www.cnblogs.com/linfengs/p/11686805.html

时间: 2024-08-06 18:20:00

例子:列表--杨辉三角的相关文章

Java_基础篇(杨辉三角)

对于刚刚学Java的同学来说,杨辉三角是一个很好的例子. 杨辉三角让初学者更好的理解数组的定义和更好地去运用数组,特别是二维数组. 除此之外,还让初学者更好的掌握嵌套语句的使用. 以下是我的杨辉三角Java代码: 1 /* 2 * 简单的杨辉三角 3 * 1 4 * 1 1 5 * 1 2 1 6 * 1 3 3 1 7 * 1 4 6 4 1 8 * ... 9 * 根据杨辉三角的规律: 10 * 1.每一行增加一个数. 11 * 2.每一行的第一个数和最后一个数都是1. 12 * 3.从第三

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

列表生成式 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 中使用 for、while 循环打印杨辉三角练习(列表索引练习)。

Python中使用for while循环打印杨辉三角练习(列表索引练习). 杨辉三角是一个由数字排列成的三角形数表,一般形式如下: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 ....................... 杨辉三角最本质的特征是,它的两条斜边都是由数字1组成的,而其余的数则是等于它肩上的两个数之和. 方法一: __author__ = 'Brad' n = int(input('请输入你想打印杨辉三角

列表, 元组,以及字符串等字符结构以及杨辉三角的四种写法

列表的 删除复制等操作: list.remove(value) 删除遇到的第一个值 list.pop(index)就地弹出某个值 list.clear()>>None 清楚 list. reverse反转 list.sort() 排序 *** 列表的复制有浅复制和深复制之别 用=直接复制,表示地址不变,用的仅仅是链接 用shadowcopy,复制的,再列表中的列表的地址不变是链接 用deepcopy才是完全自己开了一个新列表空间 随机数的选取 random模块 dandint(a,b)返回[a

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

Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows = 5,Return [ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1] ] 题目标签:Array 题目给了我们一个numRows,让我们写出这个行数的杨辉三角.来观察一下原题例子,5行的话,第一行只有1,第二行,只有1,第三行,除去第一个1和最后一个1,中间的都是上一行的两边

LeetCode 119. Pascal&#39;s Triangle II (杨辉三角之二)

Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3,Return [1,3,3,1]. Note:Could you optimize your algorithm to use only O(k) extra space? 题目标签:Array 这道题目与之前那题不同的地方在于,之前是给我们一个行数n,让我们把这几行的全部写出来,这样就可以在每写新的一行的时候根据之前的那

js算法集合(二) javascript实现斐波那契数列 (兔子数列) Javascript实现杨辉三角

js算法集合(二)  斐波那契数列.杨辉三角 ★ 上一次我跟大家分享一下做水仙花数的算法的思路,并对其扩展到自幂数的算法,这次,我们来对斐波那契数列和杨辉三角进行研究,来加深对Javascript的理解. 一.Javascript实现斐波那契数列 ①要用Javascript实现斐波那契数列,我们首先要了解什么是斐波那契数列:斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为

JavaScript打印杨辉三角

1.什么是杨辉三角? 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 上面就是一个简单的杨辉三角的例子 观察一下, 第n行有n个元素, 第n行的第一个元素和第n个元素为1, 其他元素,假设为第n行第m个元素,则其值为第n-1行第m-1个元素+第n-1行第m个元素. 2.附上代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>杨辉三角</

Makefile总结和反序字符数组,整体右移数组,杨辉三角!

2015.1.23今天我值日 继续接着昨天Makefile的目标开始记录:第一种:有 .PHNOY声明,但是冒号后面没有依赖文件.PHNOY:clean clean://没有依赖文件 rm *.0 temp 第二种:冒号前后的文件没有直接的依赖关系也可以没有依赖文件 .PHNOY:all 1 all: main.o f1.o f2.o f3.o 2 gcc -o all main.o f1.o f2.o f3.o 3 main.o: main.c 4 gcc -c main.c -o main.