看别人的,杨辉三角不知道怎么生成了。
Topic source思路我没有看明白。 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]
@何苦来哉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]
- 1
护苗2018
思路: 里面都写得很清晰了吧。
Code: