Discuss / Python / 有点懵

有点懵

Topic source

大能猫929

#1 Created at ... [Delete] [Delete and Lock User]
def triangles():    L=[1]    while True:        yield L        L=[1]+[L[i]+L[i+1] for i in range(len(L)-1)]+[1]

虽然结果是对的,但是有一个疑问,

 L=[1]+[L[i]+L[i+1] for i in range(len(L)-1)]+[1]

L=[1],这个时候列表生成器里是[L[0]+L[1]],L[1]不存在啊,这个情况是怎么处理过去的?

大能猫929

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

前几步的执行步骤是这样的

第一次执行的时候还没执行列表生成器之前,返回最开始定义的L=[1]

第二次执行的时候执行列表生成器,此时len(L)-1=0,range(0)等于空,for循环都不会执行,所以列表生成器里面什么都没生成就返回了一个空,前后再都加[1]就变成了[1]+[]+[1] 等于[1,1]

大能猫929

#4 Created at ... [Delete] [Delete and Lock User]
def s():
  L=[1]
  while True:

大能猫929

#5 Created at ... [Delete] [Delete and Lock User]
def triangles():
  L=[1]
  while True:
    yield L
    L=[1]+[L[i]+L[i+1] for i in range(len(L)-1)]+[1]

原来range(0)为空?我一直以为range(0,0)是(0,)。。。。


  • 1

Reply