当前位置:首页>python>Python 循环内列表初始化踩坑完整通用教程

Python 循环内列表初始化踩坑完整通用教程

  • 2026-09-10 20:45:12
Python 循环内列表初始化踩坑完整通用教程

前言

本文适合Python新手学习,解决循环编写时最常见报错:在循环内初始化列表、字典、变量,导致历史数据丢失、数据被覆盖、计数统计出错。文中整理错误案例、问题原因、正确写法、避坑技巧,适配文件遍历、数据分组、数字统计、字符串拼接日常开发场景,日常写代码可直接对照自查。

一、问题场景还原

业务需求

遍历多个文件夹,筛选每个文件夹内指定后缀文件,单独保存每个文件夹的筛选结果,最后汇总所有文件夹数据,支持分组查看、合并查看数据。

错误代码示范

python                  import os                  # 存放所有文件夹汇总分组结果                  all_file = []                  # 外层循环:遍历每个分类子文件夹                  for folder in ["folder1", "folder2", "folder3"]:                  # ❌ 致命踩坑:列表初始化写在循环内部,每轮循环新建空列表                  target_file = []                  # 模拟读取当前文件夹下文件                  for file in os.listdir(folder):                  # 筛选后缀为_target.txt的目标文件                  if file.endswith("_target.txt"):                  target_file.append(file)                  # 存入本轮文件夹文件列表                  all_file.append(target_file)                  print(target_file)# 输出 [] 空列表!仅保留最后一轮循环变量                  print(all_file) # 结果正常,存储全部文件夹分组列表

核心现象解读

target_file = [] 写在循环内部:每执行一次循环,都会新建空列表,直接清空上一轮文件夹的数据;

循环结束后:临时变量target_file只会保留最后一轮循环的数据,打印这个变量,很容易误以为代码丢数据;

代码隐患:如果不用外层列表append汇总数据,只靠这个临时变量存数据,最终只会保留最后一组数据,前面所有数据全部丢失。

新手高频错误(极易踩坑)

想要累加全部数据,却在循环内重置全局列表,直接清空之前保存的数据:

python                  target_file = []                  for folder in ["f1","f2"]:                  # ❌ 错误:循环内重置全局列表,直接清空过往所有文件数据                  target_file = []                  target_file.append("demo.txt")                  print(target_file) # 仅 ['demo.txt'],f1文件夹数据彻底丢失

二、同类四大经典循环变量踩坑汇总

这个坑不只是列表独有,字典、数字变量、字符串都会出现,属于Python循环通用易错点。

坑1:列表循环内初始化,历史分组数据丢失

python                  # 需求:分组收集每轮数字,汇总全部分组                  res = []                  for i in range(3):                  tmp = [] # 每次循环新建空列表,清空上一轮数据                  tmp.append(i)                  res.append(tmp)                  print(tmp) # 循环结束 tmp=[2],无法获取全部数据

坑2:字典循环内赋值,旧分组键值被覆盖

python                  # 需求:存储每个人得分                  total = {}                  for name in ["A","B"]:                  info = {} # 每轮新建空字典,清空上一组信息                  info["score"] = 10                  total[name] = info                  print(info) # 仅保留最后一个B的信息

坑3:数值计数循环内重置,样本统计永久失效

python                  # 需求:统计当前文件夹文件总数                  count = 0                  for f in os.listdir("./"):                  count = 0 # 每轮重置计数,最终统计结果永远为0                  count +=1                  print(count)

坑4:字符串循环内赋值,文本拼接数据截断

python                  # 需求:拼接多个文件文本内容                  content = ""                  for file in ["1.txt","2.txt"]:                  content = "" # 每轮清空字符串,之前内容失效                  content += "数据"                  print(content) # 只输出最后一次赋值内容

三、完整可运行实战示例

python                  import os                  # 模拟本地目录:folder1、folder2 两个子文件夹                  # 1.分组结果容器 2.全局合并容器,全部外置初始化                  group_result = []                  total_target_file = []                  # 遍历分类文件夹                  sub_folders = ["folder1", "folder2"]                  for folder in sub_folders:                  # 单文件夹临时列表,本轮迭代专属                  temp_list = []                  # 模拟文件夹内存量文件                  files = ["1_target.txt", "2.jpg", "3_target.txt"]                  for file in files:                  if file.endswith("_target.txt"):                  temp_list.append(file)                  # 保存分组数据                  group_result.append(temp_list)                  # 合并至全局总数据                  total_target_file.extend(temp_list)                  print("各文件夹分组结果:", group_result)                  print("全局合并所有目标文件:", total_target_file)                  # ❌ 错误校验:print(temp_list) 只会输出最后一个文件夹数据

最新文章

随机文章