Discuss / Python / 一开始一直想不明白,直到……

一开始一直想不明白,直到……

Topic source

小喵biubiu

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

-- coding: utf-8 --

def triangles():#杨辉三角 L = [1] while True: yield L L = [([0] + L)[i] + (L + [0])[i] for i in range(len(L) + 1)]

#([0]+L)[i]表示[0]+L形成的新list中索引为i的元素.for i in range()是迭代出range的每个元素.

#第二次执行:L=[([0,1])[i]+([1,0])[i] for in range(2)]->L=[(([0,1])[0]+([1,0])[0]),(([0,1])[1]+([1,0])[1])]->L=[(0+1),(1+0)]->L=[1,1]

#第三次执行:L=[(([0,1,1])[0]+([1,1,0])[0]),(([0,1,1])[1]+([1,1,0])[1]),(([0,1,1])[2]+([1,1,0])[2])]->L=[(0+1),(1+1),(1+0)]->L=[1,2,1]

#第四次执行:L=[(([0,1,2,1])[0]+([1,2,1,0])[0]),……,(([0,1,2,1])[3]+([1,2,1,0])[3])]->L=[(0+1),(1+2),(2+1),(1+0)]->L=[1,3,3,1] n = 0 results = [] for t in triangles(): print(t) results.append(t) n = n + 1 if n == 10: break

#结果

#0行,第一次执行:[1]

#1行,第二次执行:[1,1]

#2行,第三次执行:[1,2,1]

#3行,第四次执行:[1,2,3,1]

一开始怎么也弄不清楚L那一长串是怎么计算的,后来一直看前面的基础,最后终于弄明白了,我一直把for...in给理解错了,我一直错误的理解为迭代出的是list……导致一直在list相加,但实际是元素,才茅塞顿开。基础知识还没理解透是很严重的错误。

第四次是 1,3,3,1 基本看懂了 但是还是写不出来这种复杂程序 还有点不理解在L[i] i的值超出索引范围的时候不会报错而是忽略跳出循环

小喵biubiu

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

Traceback (most recent call last): File "<pyshell#27>", line 1, in <module> for t in triangles(): File "<pyshell#18>", line 5, in triangles L = [(L)[i] + (L)[i] for i in range(len(L) + 1)] File "<pyshell#18>", line 5, in <listcomp> L = [(L)[i] + (L)[i] for i in range(len(L) + 1)] IndexError: list index out of range

如果不在表达式中添加0补位的话,会报索引错误,超出范围的。


  • 1

Reply