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

Python读取文本文件转整数存入列表异常求助:结果重复

问题分析与解决方法

嘿,我来帮你搞定这个问题~你遇到的这个情况其实是Python里对象引用的常见坑:

你在函数开头只创建了一个列表m = [0,0],之后每次循环只是修改这个列表里的元素值,然后把m添加到lis中。但实际上,lis.append(m)存的不是列表里的值,而是m这个列表对象的引用。所以lis里的三个元素其实都指向同一个列表对象,当最后一次循环把m改成[5,6]时,所有引用都会显示这个最终值,这就是为什么你得到[[5,6], [5,6], [5,6]]。


解决方法有两种,选你顺手的就行:

方法1:每次循环新建一个列表对象

把m = [0,0]放到循环内部,这样每次循环都会创建一个全新的列表,就不会出现引用复用的问题了:

def read_file():
    lis = []
    with open("data.txt") as f:
        for line in f:
            m = [0,0]  # 每次循环都新建列表
            m[0], m[1] = line.split(",")
            m[0] = int(m[0])
            m[1] = int(m[1].strip())  # 处理可能存在的换行符
            lis.append(m)
    print(lis)

方法2:添加列表的副本而非原引用

如果不想移动m的定义,可以在append的时候创建m的副本,这样存的就是当前值的拷贝,不会跟着后续修改变化:

def read_file():
    lis = []
    m = [0,0]
    with open("data.txt") as f:
        for line in f:
            m[0], m[1] = line.split(",")
            m[0] = int(m[0])
            m[1] = int(m[1].strip())
            lis.append(m.copy())  # 添加副本,避免引用复用
            # 也可以用 lis.append(list(m)) 效果一致
    print(lis)

额外优化:简化代码

其实你可以跳过初始化m的步骤,直接拆分字符串并转换为整数,一步生成子列表:

def read_file():
    lis = []
    with open("data.txt") as f:
        for line in f:
            # 拆分后直接转整数,生成新列表
            num1, num2 = map(int, line.strip().split(","))
            lis.append([num1, num2])
    print(lis)

这样运行后就能得到你预期的[[1, 2], [3, 4], [5, 6]]啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:21:24