我想把一个文件(比如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任何想法和帮助都将受到高度的感谢!
发布于 2014-08-13 02:05:48
由于您的文件充满了数字,我建议您使用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])发布于 2014-08-13 02:03:38
问题1:填充data
您可以添加一个生成器,生成数据中每一行的列。这意味着你的data看起来像
[[], <generator>, <generator>, ...]您要做的是从一个空列表开始,然后为每一行添加列:
data = []
for row in fil:
cols = row.split()
data.append(cols)问题2:打印data
data[:][1]不会执行您所期望的操作。它从data中获取所有元素(即复制列表)并选择第二个元素。相反,您可以使用
[row[1] for row in data]以获取每行的第二列。要将输出格式化为所需格式,可以使用string.join
print("\n".join(row[1] for row in data))发布于 2014-08-13 02:04:40
只需将每行的数据点附加到数据。不需要在data中初始化列表。然后,为了得到你想要的列,你可以使用列表理解:
fil = open('data.dat','r')
data = []
for rows in fil:
data.append(rows.split())
print([x[1] for x in data])https://stackoverflow.com/questions/25271035
复制相似问题