Python当中关于杨辉三角的列表实现

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python当中关于杨辉三角的列表实现相关的知识,希望对你有一定的参考价值。

杨辉三角
的一些理解:
感觉杨辉三角的实现至少在前两行是特殊的。在后面的几行代码中我是这样想的,可以用第n项加第n+1项。两边再加上1就可以了罢。两边如果都这么做的话可以实现对称的操作。

让我们来实现吧。在实现的过程中想套用一层循环发现难以实现,用两层试试看。

yh=[[1],[1,1]]
for i in range(2,6):
line=[1]
ls=yh[i-1]
for j in range(len(ls)-1):
line.append(ls[j]+ls[j+1])
line.append(1)
yh.append(line)
print(yh)

#打印n行的杨辉三角
a=int(input(‘请输入第几行‘))
y=[[1],[1,1]]

for i in range(a-2):
n=y[i+1]
long=len(n)
line=[1]
for j in range(long-1):
line.append(n[j]+n[j+1])
line.append(1)
y.append(line)
print(line)

关于补零的一些想法,在杨辉三角当中,可以将左右两边当成多了一个零,在进入下一行的时候就可以看成0+1=1,同理右边也是一样,在实际写代码中,开始确实是左边多一个[0]

,右边多一个[0],但实际操作下来,左边的[0]可以省去,因为在python当中是有独特的负索引机制,在右边的最后一项可以看做是[-1]项,这样从0开始迭代的话可以从i-1开始

迭代,是一个python的独特思想。

y=[[1]]

for i in range(1,6):
n=y[i-1]+[0]
l=[]

for j in range (i+1):
    l.append(n[j-1]+n[j])

y.append(l)

print(y)

如果用独特的负索引的话,用对称性也是可以做出来的也是从-1项开始做起一直做到中间,这就需要在一开始的时候就创建一个刚刚好的列表空间,然后将元素一个一个填充进去

,这种方法就叫做对称法
y=[[1]]
for i in range(5):

n=y[i]+[0]

line=[1]*(i+2)

for j in range((i+2)//2+1):

    line[j]=n[j-1]+n[j]

line[-j-1]=line[j]    

y.append(line)

print(y)

其实有这个想法之后实现代码并不困难,其实这种方法只是一种思想,这更多是为最后一种方法铺路,前面三种方法可以看出都是引用一个新列表然后将新列表填充到旧列表当中,如果将旧列表直接copy一个新列表这样可以省去许多冗余量,我们称这第四种方法为单列覆盖法。

y=[1]*6
for i in range(6):
long=6-i
tmp=1

for j in range (1,i//2+1):
    val=y[j]+tmp
    tmp=y[j]
    y[j]=val
    y[-long-1]=val
print(y[:i+1])

在这里引用了一个中间变量tmp因为如果不引用的话会造成数据覆盖,会有人在实际操作中会判断是奇数列还是偶数列,但是我们在实验中可以看到其实判断是多余的,因为完全可以在多余列覆盖即可。
到现在杨辉三角就差不多完成了。

以上是关于Python当中关于杨辉三角的列表实现的主要内容,如果未能解决你的问题,请参考以下文章

20160205.CCPP体系详解(0015天)

Python代码阅读(第40篇):通过两个列表生成字典

Python代码阅读(第13篇):检测列表中的元素是否都一样

Python实现杨辉三角

JavaScript笔试题(js高级代码片段)

13 个非常有用的 Python 代码片段