Discuss / Python / 交作业&一点对list的体会

交作业&一点对list的体会

Topic source

EnsomLiu

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

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是”首尾相接“的!

EnsomLiu

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

根据首尾相接这个原理,写一个首尾不共用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))]

Sunvvew

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

请教那个 '*L' 是什么意思?


  • 1

Reply