我想将一个(例如5行和3列)的文件读入二维列表。 所以,到目前为止我的代码是:
说我的数据文件是:
1.0 2.1 3.4
1.1 2.5 3.0
2.1 2.4 2.8
2.6 2.5 5.6
1.8 8.3 5.4
fil = open('data.dat','r')
data = [[]] # initialize two-dim. list
for rows in fil:
cols = rows.split()
data.append(cols[i] for i in cols)
print(data[:][1])
所以我希望命令print(data[:][1])
打印第2列的所有行。也就是说,输出应该是:
2.1
2.5
2.4
2.5
8.3
任何想法和帮助都将受到高度赞赏!
答案 0 :(得分:3)
由于您的文件中包含数字,我建议您使用numpy
:
>>> import numpy as np
>>> f = open("data.dat")
>>> data = np.loadtxt(f, delimiter=" ")
>>> data
array([[ 1. , 2.1, 3.4],
[ 1.1, 2.5, 3. ],
[ 2.1, 2.4, 2.8],
[ 2.6, 2.5, 5.6],
[ 1.8, 8.3, 5.4]])
这样,您还可以轻松地从数据中选择单个列:
>>> data[:,1]
array([ 2.1, 2.5, 2.4, 2.5, 8.3])
答案 1 :(得分:2)
data
添加一个生成器,将每行的列生成数据。这意味着您的data
看起来像
[[], <generator>, <generator>, ...]
您要做的是从一个空列表开始,并为每一行添加列:
data = []
for row in fil:
cols = row.split()
data.append(cols)
data
data[:][1]
没有达到您的预期。它从data
获取所有元素(即它复制列表)并选择第二个元素。相反,使用
[row[1] for row in data]
获取每行的第二列。要根据需要格式化输出,可以使用string.join
:
print("\n".join(row[1] for row in data))
答案 2 :(得分:0)
只需将每行的数据点附加到数据即可。无需初始化data
内的列表。然后,为了获得所需的列,您可以使用列表推导:
fil = open('data.dat','r')
data = []
for rows in fil:
data.append(rows.split())
print([x[1] for x in data])