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

Python循环保存TXT文件遇索引错误,如何实现条件筛选保存?

问题与修复方案

问题描述

用户尝试在Python中根据条件选择性将数据保存到.txt文件,条件原本写为len(J[i+1])>=len(J[i]),但出现索引越界错误IndexError: list index out of range。原始代码如下:

File=1
import csv
for i in range(0,5):
    J=[0,1]*(i-1)
    print("J =",J)
    print("len J =",len(J))
    
    with open(rf"C:\Users\User\OneDrive - Technion\Research_Technion\Python_PNM\Surfactant A-D\12 nodes_New\{File}\Test.txt", 'a') as f: 
        writer = csv.writer(f)
        if (len(J[i+1])>=len(J[i])): 
            f.writelines('\n')
            f.write(str(J))

报错信息:

in <module>
    if (len(J[i+1])>=len(J[i])):

IndexError: list index out of range

错误原因

  1. 索引越界:J[i+1]试图访问列表J的第i+1个元素,但J的长度是2*(i-1),当i≥2时,i+1会超过J的有效索引范围(比如i=2时J长度为2,索引最大是1,i+1=3就越界);当i<2时J是空列表,任何索引访问都会报错。
  2. 逻辑误解:需要比较的是当前J的长度和上一次J的长度,但错误地去取列表元素的长度——J的元素是整数0/1,整数没有len()属性,这本身也是错误(只是索引越界先触发了报错)。

修复方案

修改逻辑,记录上一次J的长度,每次循环比较当前J长度与上一次的长度,满足条件时写入文件:

File = 1
# 初始化上一次J的长度,设为比最小可能长度(0)小的值
prev_len = -1

for i in range(0,5):
    J = [0,1]*(i-1)
    current_len = len(J)
    print("J =", J)
    print("len J =", current_len)
    
    # 只在当前长度大于等于上一次长度时写入
    if current_len >= prev_len:
        with open(rf"C:\Users\User\OneDrive - Technion\Research_Technion\Python_PNM\Surfactant A-D\12 nodes_New\{File}\Test.txt", 'a') as f:
            f.write('\n')
            f.write(str(J))
    # 更新上一次长度为当前长度,供下一次循环比较
    prev_len = current_len

补充说明

  • 将文件打开操作放到条件判断内部,避免不必要的文件IO操作。
  • 移除了无用的csv.writer,因为只是写入字符串形式的列表,不需要csv模块。

内容的提问来源于stack exchange,提问作者KeplerNick123

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 16:05:33