【问题标题】:Python read file into array, wrong valuePython将文件读入数组,错误值
【发布时间】:2015-06-10 11:47:36
【问题描述】:

以下是代码,我试图逐行读取文件并将值相应地写入数组,但是,当我打印 sensing 时,它确实包含很多元素,但是它们的值是最后一次修剪

sensing = []
with open("data.txt") as data:
    for line in data:        
        strline = line.strip()
        if(strline[1] =='[' ):
            trimmed[0] = int(strline[2:5])
            trimmed[1] = int(strline[7:10])
        else:
            trimmed[0] = int(strline[1:4])
            trimmed[1] = int(strline[6:9])
        **sensing.append(trimmed)**

data.txt: [592, 180],[583, 189],[576, 197],[569, 205],[560, 214],[551, 225],

感应:[[551, 225], [551, 225], [551, 225], [551, 225], [551, 225], [551, 225]]

我想要什么:感应:[[592, 180],[583, 189],[576, 197],[569, 205],[560, 214],[551, 225]]

【问题讨论】:

  • 您首先在哪里定义“修剪”变量?它不在那个代码中。
  • 列表是可变的,所以如果你在这个循环之外定义了 trimmed 并重用它,你会得到你概述的结果......在循环内移动 trimmed。

标签: python arrays io


【解决方案1】:

这里的问题几乎可以肯定是与引用有关。 Python 中的列表(和大多数对象)保存在引用变量中。感知中的每个列表都指向内存中您称之为修剪的列表。当您更改 trimmed 时,感测中的所有子列表都会更新,因为它们都指向那个列表。

您需要通过循环重新定义每次迭代的修剪(使用trimmed = [None, None]),或者您可以使用sensing[-1].append(element)sensing.append([]) 之类的内容直接附加到感应列表以添加新列表。

【讨论】:

  • 非常感谢您的解释。
【解决方案2】:

假设一行输入为:[592, 180],[583, 189],[576, 197],[569, 205],[560, 214],[551, 225]

sensing = []
with open("data.txt") as data:
    for line in data:
        sendsing = [map(int, i.split(", ")) for i in line.strip()[1:-1].split("],[")]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 2015-07-07
    • 2018-06-26
    相关资源
    最近更新 更多