【关于Python中enumrate()函数】

【关于Python中enumrate()函数】_第1张图片

缘起是在学习廖雪峰的官方网站时,生成器一节中打印杨辉三角形一题中,网友的简洁写法

def triangles(): 
	b = [1] 
	while True: 
		yield b 
		b = [1] + [x + b[i + 1] for i, x in enumerate(b[:-1])] + [1]

对于b的迭代代码中的列表生成式[x + b[i+1]] for i, x in enumrate(b[:-1])]的理解

这是第二行以后list除首尾两个1中间部分的代码

b[:-1]将上一行list的最后一个元素排除,因为有b[i+1],防止越界

但在第一次循环,当b = [1]时,b[i+1]是否越界
这次循环时,enumrate()函数的传入参数是[]
按照官方文档中给的等价代码,返回值是一个generator,若使用next()来拿到值,直接就会抛出StopIteration的错误
但如果像列表生成式中那样使用for循环,不会抛出错误,而是直接结束运行,导致整个列表表达式在第一次循环时返回的是一个[]

【关于Python中enumrate()函数】_第2张图片

你可能感兴趣的:(Python,python)