Discuss / Python / 这样理解对吗?

这样理解对吗?

Topic source

L0standfound

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

自己做不出来!!! 看了一下评论区的风袭6729的答案挺简洁 自己分析一边看看:

def triangles(): a = [1] while True: yield a a = [sum(i) for i in zip([0] + a, a + [0])]

n = 0 for t in triangles(): print(t) n = n + 1 if n == 10: break

分析: a = [1] #只有一个值的list while True: #一个无限死循环 yield a #返回第一次值,此时还是[1]

a = [sum(i) for i in zip([0] + a, a + [0])]分开来看,先看后面括号内

第一次循环:a = [1] [0] + [a] 即 [0, 1] 即小括号内([0, 1], [1, 0]) zip函数是揉合两个数组的 例如:zip([a, b], [c, d]) 即 (a, c)(b, d) 得到i的值为 (0, 1)(1, 0) 然后sum求和函数得到 [1, 1]

第一次循环:a = [1, 1] [0] + [a] 即 [0, 1, 1] 即小括号内([0, 1, 1], [1, 1, 0]) zip函数是揉合两个数组的 得到i的值为 (0, 1)(1, 1)(1, 0) 然后sum求和函数得到 [1, 2, 1]

以此类推循环下去

然后后面的代码 n = 0 for t in triangles(): print(t) n = n + 1 if n == 10: break

等于做了一个切片,只列出了前10次循环

不知道这样理解的对不对?


  • 1

Reply