为什么我在列表构造的输出中看到额外的]应该只有一个列表列表?终端问题?
特别是它应该只有两个级别,全局列表和每个子列表(但没有子子列表等等。)
通过读取具有由" \ 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中,可以看到这个问题)。当向右滚动时,可以看到屏幕捕获的线条。
答案 0 :(得分:1)
您正在创建内部列表。您在文件的每一行使用一个列表解析,因此它每行生成一个整数列表。如果您希望将其全部列为一个列表,请使用extend
而不是append
:
for line in file:
data.extend(int(i) for i in line.split())
注意我在这里使用的是生成器表达式而不是列表推导。使用列表理解是一种浪费,因为它在内存中创建整个列表只能读取一次然后丢弃。