【关于Python中enumrate()函数】

img

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

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循环,不会抛出错误,而是直接结束运行,导致整个列表表达式在第一次循环时返回的是一个[]

img

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值