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

Google Colab中for循环出现List Index out of range问题求助

解决索引越界问题:合并两个文件对应行的正确方式

你的代码出现索引越界错误,主要有两个核心问题:

1. 重复调用readlines()导致文件指针耗尽

每次调用file.readlines()或file1.readlines()时,都会从当前文件指针位置开始读取所有行。第一次调用后,文件指针已经移动到文件末尾,后续再调用readlines()会返回空列表。这就导致当i>0时,file.readlines()[i]试图访问空列表的第i个元素,直接触发索引越界。

2. 不必要的嵌套循环

你用了两层for循环,但实际需求是将两个文件的对应行(第1行和第1行,第2行和第2行)合并,嵌套循环会导致大量无效的遍历,完全没必要。

修复后的代码示例

我们可以先一次性把两个文件的所有行读取到内存中,再用单循环或zip函数来合并对应行,同时用with语句自动管理文件的打开和关闭(避免手动关闭文件的遗漏):

# 用with语句自动管理文件生命周期
with open("task4.txt", "r") as file, open("task4part2.txt", "r") as file1, open("task4part3.txt", "w") as file2:
    # 一次性读取所有行到变量,避免重复读取
    lines_file = [line.strip("\n") for line in file.readlines()]
    lines_file1 = [line.strip("\n") for line in file1.readlines()]
    
    # 遍历对应行,取两个文件中较短的长度,避免越界
    for line1, line2 in zip(lines_file, lines_file1):
        merged_line = line1 + line2
        print(merged_line)
        # 写入合并后的行到目标文件
        file2.write(merged_line + "\n")

额外说明

  • 使用zip函数可以自动并行遍历两个列表,当其中一个列表遍历完就停止,避免因两个文件行数不一致导致的索引问题。
  • 如果需要处理两个文件行数不一致的情况(比如其中一个文件更长,剩余行单独写入),可以用itertools.zip_longest,需要先导入itertools模块:
import itertools

with open("task4.txt", "r") as file, open("task4part2.txt", "r") as file1, open("task4part3.txt", "w") as file2:
    lines_file = [line.strip("\n") for line in file.readlines()]
    lines_file1 = [line.strip("\n") for line in file1.readlines()]
    
    for line1, line2 in itertools.zip_longest(lines_file, lines_file1, fillvalue=""):
        merged_line = line1 + line2
        file2.write(merged_line + "\n")

这样修改后,就能正确合并两个文件的对应行,且不会出现索引越界的问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:56:45