Python中zip()与sum()组合使用的代码运行原理求解
问题代码原理详解
这段代码的最终输出结果为2,作用是统计两个列表相同位置下元素不相等的总数量,各疑问点解释如下:
- 关于a、b未提前定义是否合法
完全合法。a和b是生成器表达式内部的局部循环变量,仅在该表达式范围内生效,不需要在代码外部提前定义。 - 关于
b for a的误解
该写法是你对代码的断句错误,生成器表达式的完整结构为(返回值逻辑) for (变量声明) in (遍历对象),此处的实际结构为a != b for a, b in zip(list_1, list_2),不存在b for a的语法,也不是遍历a的操作。 - 关于a、b的指代
首先zip(list_1, list_2)会把多个可迭代对象按位置一一配对,最终返回的配对总数和长度最短的输入对象一致:
本例中list_1长度为4,list_2长度为5,因此zip返回的可迭代对象包含4个元组:('a','a')、('a','b')、('a','b')、('b','b')。
每次循环时,a指代当前配对元组的第一个元素(来自list_1),b指代当前配对元组的第二个元素(来自list_2)。 - 关于sum()对比较结果求和的逻辑
Python中布尔类型bool是整数类型int的子类,True对应整数值1,False对应整数值0。a != b的返回结果是布尔值,sum()会自动把这些布尔值当作整数累加,最终得到所有位置元素不相等的总次数。
本例中四个配对的比较结果分别为False、True、True、False,对应数值0、1、1、0,累加结果就是2。 - 关于整个代码的遍历对象
遍历对象是zip(list_1, list_2)返回的可迭代配对序列。
内容的提问来源于stack exchange,提问作者legendaryxv2
相关产品推荐
相关产品推荐

