Python中[string for i, string in enumerate(a)]的执行逻辑与变量匹配疑问
关于Python列表推导式中enumerate元组解包的疑问解答
首先明确:enumerate(a)每次迭代返回的是包含两个元素的元组,格式为(索引值, 对应元素),比如你例子里的(0, 'a')、(1, 'b')这类结构。
你第二段代码里的for i, string in enumerate(a),用到的是Python的元组解包特性——不是Python“知道”i是索引、string是元素,而是它会自动把迭代得到的每个元组,按位置拆成对应的值,赋值给逗号分隔的变量。
把列表推导式拆成普通循环看会更清楚:
a = ['a','b','c', 'd'] c = [] for item in enumerate(a): # item就是(0,'a')、(1,'b')这类元组 i, string = item # 手动解包的操作,和直接写for i, string in enumerate(a)完全等价 c.append(string) print(c)
所以当你在循环头写i, string时,Python会自动帮你完成拆包动作,把元组的第一个元素赋值给i,第二个赋值给string。
而第一段代码里for string in enumerate(a)没有做解包,string直接接收了整个元组,所以最终列表里存的就是一个个完整的元组。
内容的提问来源于stack exchange,提问作者Funnyone
相关产品推荐
相关产品推荐

