Discuss / Python / 研究了好久,也只是明白了一半,算是死记硬背了一下,看看这个理解不

研究了好久,也只是明白了一半,算是死记硬背了一下,看看这个理解不

Topic source

def yh(): L = [1] while True: yield L L = [L[i]+L[i+1]for i in range(len(L)-1)] #这一步最难理解,大概就是先将除收尾1的数列排好,这一步第一次循环,len(L)=1,再-1=0,因此range(0)为空集[],因此第一次循环L[i]和L[i+1]都是空集,L也就是空集了。 L.insert(0,1)#再首位添加1,因为第一次循环L为空集,添加后就是[1] L.append(1)#最后末尾添加1,因为第一次循环L为空集,但添加了上一步的1,再添加末位后就是[1,1],接下来的循环大家就可以进一步按照上面的思路举一反三了 n = 0 for P in yh(): print(P) n = n + 1 if n == 10: break 输出: [1] [1, 1] [1, 2, 1] [1, 3, 3, 1] [1, 4, 6, 4, 1] [1, 5, 10, 10, 5, 1] [1, 6, 15, 20, 15, 6, 1] [1, 7, 21, 35, 35, 21, 7, 1] [1, 8, 28, 56, 70, 56, 28, 8, 1] [1, 9, 36, 84, 126, 126, 84, 36, 9, 1]

狗辰子

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

理解这一步的关键是要知道 在L = [1] + [L[i] + L[i+1] for i in range(len(L)-1)] L[i]+L[i+1]中的L,是上一步生成的列表 L = [1, 6, 15, 20, 15, 6, 1] print([1] + [L[i] + L[i+1] for i in range(len(L)-1)] + [1]) 运行一下就知道了

是的,我之前就是不太理解 我现在的理解是yield第一次就会中断循环,所以不是直接循环而是中断一次,就是上一次的L


  • 1

Reply