Discuss / Python / 看别人的,杨辉三角不知道怎么生成了。

看别人的,杨辉三角不知道怎么生成了。

Topic source

护苗2018

#1 Created at ... [Delete] [Delete and Lock User]

思路: 里面都写得很清晰了吧。

Code:

    L=[1] #定义一个原始 list[1]
    while True:
        yield L #返回该 list 
        L=[L[x]+L[x+1] for x in range(len(L)-1)] #计算下一行中间的值(相当于将上一次 list 内的所有函数左右相加生成新的函数,但是这时候旁边的1被加进去了,所以就需要以下的两个添加1的操作) 
        L.insert(0,1) #在开头插入1 
        L.append(1) #在结尾添加1

思路我没有看明白。 L = [L[x] + L[x+1] for i in range(len(L)-1)]是计算出中间的值。 杨辉三角形第一行是1,第二行是11 说明第二行的中间值为空吗? 这个空是怎么计算出来的?

我是这样想的: 计算第二行,因为L=【1】 代入L = [L[x] + L[x+1] for x in range(len(L)-1)] len(L)=1 -->range(0,0) PS:这个range(0,0)是一个空的list吗?

那么在for循环中,打印第二行的时候,L【x】值是多少?L【x+1】是多少?

我这样写检测一下第二行时x的变化和L的变化,发现不仅x运行不出来,连L的值也变了,这是为什么? L=[1] for x in range(len(L)-1): L=L[x]+L[x+1] print('this',x) print(L) L.insert(0,1) L.append(1) print(L) 运行结果: [1] [1, 1, 1]

VG庚庚

#4 Created at ... [Delete] [Delete and Lock User]

回复2楼: range(0)为空

护苗2018

#5 Created at ... [Delete] [Delete and Lock User]

@何苦来哉ooo Q1:杨辉三角形第一行是1,第二行是11 说明第二行的中间值为空吗?这个空是怎么计算出来的?

A1:第二行两个元素,按照我写的这个L=[L[x]+L[x+1] for x in range(len(L)-1)]的话len(L)的值是1所以range(len(L)-1)就为range(0, -1)range(0, -1)为空,不生成任何数列)了,即L = [],再加上旁边两个1就好啦。 关于range(0, -1)为空跑一下这个就明白了

#range(0, -1)为空
>>> for i in range(0, -1):
...     print(i)
>>>
#range(4, 10, 2)从4开始到10(不含10) 步进为2
>>> for i in range(4, 10, 2):
...     print(i)
... 
4
6
8

Q2:为什么你的代码返回错误呢? A2:你的这段代码是先循环再赋值的,但是由于我上一个答案的原因这段循环代码并没有真正的运行到,所以L的赋值并没更新还是初始的[1]所以导致了加上左右的1以后最后的函数变成了[1,1,1]

你的Code:

L=[1]
for x in range(len(L)-1): # 这段循环代码并没有真正的运行
    L=L[x]+L[x+1] # 导致L的赋值并没更新还是初始的[1]
    print('this'+x) 

L.insert(0,1) # 在开头插入1 
L.append(1) # 在结尾添加1
print(L) # 最后的函数变成了[1,1,1]

皇天问君

#6 Created at ... [Delete] [Delete and Lock User]

len(L)的值为1的话,range(len(L)-1)不是应该为range(0,0)嘛,为什么会是range(0,-1)的?


  • 1

Reply