You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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ỗ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:46:35