为什么我在列表构造的输出中看到额外的,应该只有一个列表列表?终端问题?

时间:2018-04-20 13:40:51

标签: python list terminal

为什么我在列表构造的输出中看到额外的]应该只有一个列表列表?终端问题?

特别是它应该只有两个级别,全局列表和每个子列表(但没有子子列表等等。)

通过读取具有由" \ n"分隔的整数值序列的文件来生成此代码的代码。是:

def read_datafile(fname):
    data = list()
    with open(fname, 'r') as file:
        for line in file:
            data.append([int(i) for i in line.split()])
    return data

# and then call print(read_datafile(fname)) to get the output.

所以这里的一切看起来都很好(?)。

然而,当我在CoCalc's terminal中阅读Python解释器中的数据输出时。然后我看到了这样的事情:

注意额外的]好像有内部列表不应该存在。还要注意编号似乎没有按顺序排列,即使数据是有序的。

这里发生了什么?

要重建问题,可以从此处下载Dorothea数据集:

https://archive.ics.uci.edu/ml/datasets/dorothea

然后启动Python解释器(我在CoCalc中使用它)并在那里粘贴上面的函数。

然后在dorothea_valid.data上调用read_datafile()并打印它(最好是在CoCalc中,可以看到这个问题)。当向右滚动时,可以看到屏幕捕获的线条。

1 个答案:

答案 0 :(得分:1)

您正在创建内部列表。您在文件的每一行使用一个列表解析,因此它每行生成一个整数列表。如果您希望将其全部列为一个列表,请使用extend而不是append

for line in file:
    data.extend(int(i) for i in line.split())

注意我在这里使用的是生成器表达式而不是列表推导。使用列表理解是一种浪费,因为它在内存中创建整个列表只能读取一次然后丢弃。