交作业&一点对list的体会
Topic source根据首尾相接这个原理,写一个首尾不共用0的生成器就是: L=[1] while True: yield L L=[*L,0,0] L=[L[i-1]+L[i] for i in range(len(L)-1)]
一样通过
按这个思路共用的0也可以放在最前面 a=[1,] while True: yield a a=[0,*a] a=[a[i-len(a)]+a[i-len(a)+1] for i in range(len(a))]
- 1
EnsomLiu
def triangles(): L=[1] while True: yield L L=[*L,0] L=[L[i-1]+L[i] for i in range(len(L))]
看了评论才写出来的…… 感觉很妙的一步是把0加在L的最后一位,也就是L[-1]的位置。这样做,当i=0时,L[i-1]就可以指向L末位的0,方便生成首位的1;当i=len(L)-1时,L[i]也可以指向这个0,方便生成末尾的1. 这让我对python的list有了更深刻的理解:这道题按照一般的思路来,我们会在上一个L的前面加0,后面加0,用来与上一个L首尾的1相加生成这一次首尾的1.而python里L[-1]是取L的最后一位,所以就相当于,应该在L[0]前面的L[-1]接在了L的最后。换句话说,python里的list是”首尾相接“的!