Python列表初始化位置不同为何导致结果差异?代码示例解析
为什么两段Python代码仅
new_a = []位置不同结果却不同? 咱们一步一步拆解这两段代码的执行逻辑,就能明白为啥结果不一样啦!
先看Ver1的执行流程
a = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89] new_a = [] # 这里在循环外初始化了一个空列表 for element in a: if element < 5: new_a.append(element) # 每次符合条件就往同一个列表里加元素 print(new_a)
- 一开始就创建了唯一的空列表
new_a,整个循环过程中这个列表对象不会被替换。 - 遍历原列表时,每遇到小于5的元素(1、1、2、3),就把它追加到这个列表里。
- 最后打印的是收集了所有符合条件元素的列表,结果是
[1, 1, 2, 3]。
再看Ver2的执行流程
a = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89] for element in a: if element < 5: new_a = [] # 每次符合条件都会重新创建一个空列表 new_a.append(element) # 只把当前元素加到新的空列表里 print(new_a)
new_a = []被放在了if判断的内部,意味着每遇到一个小于5的元素,就会重新生成一个全新的空列表,覆盖掉之前的new_a。- 第一次遇到1:创建空列表,追加1 →
new_a = [1] - 第二次遇到1:又创建新的空列表,追加1 →
new_a = [1](之前的[1]被丢弃) - 第三次遇到2:再创建新的空列表,追加2 →
new_a = [2] - 第四次遇到3:创建新的空列表,追加3 →
new_a = [3] - 后面的元素都不满足<5的条件,循环结束后,
new_a里只保留了最后一次赋值的结果,也就是[3]。
简单来说,核心区别就是:Ver1的列表初始化在循环外,是持续收集所有符合条件的元素;Ver2的列表初始化在循环内的判断里,是每次覆盖只保留当前符合条件的元素。
内容的提问来源于stack exchange,提问作者Hạ Vy Vỗ
相关产品推荐
相关产品推荐

