我有这个文件:
1 2 3
2 1 3
7 8 9
4 5 3
我想创建三个数组来保存数据,如下所示:
在第一个数组中,数据将是:1、2、7、4
在第二个数组中,数据是:2,1,8,5
在第三个数组中,数据将是:3、3、9、3
我想,在第一次我必须得到列的数量来做这件事,但我不知道是否有可能。。。
我想我可以读取所有行并将数据逐行保存在一个数组中,然后创建三个数组,其中包含我想要的内容,但这不是最好的。所以我问你有没有更好的办法?
非常感谢你!
最佳答案
如果所有行包含相同数量的列,则只需使用:
with open(filename,'r') as file:
data = zip(*[[int(x) for x in line.split()] for line in file])
现在
data
将是:data == [(1, 2, 7, 4), (2, 1, 8, 5), (3, 3, 9, 3)]
因此,您可以-如果您希望列表-
map
它们list
s,然后使用例如sequence assignment来获取列,如:with open(filename,'r') as file:
col1,col2,col3 = map(list,zip(*[[int(x) for x in line.split()] for line in file]))
在这种情况下:
>>> col1
[1, 2, 7, 4]
>>> col2
[2, 1, 8, 5]
>>> col3
[3, 3, 9, 3]
如果有更多的列,而您对它们不感兴趣,可以使用
*_
来捕获其他列(并忽略它们)。比如:with open(filename,'r') as file:
col1,col2,col3,*_ = map(list,zip(*[[int(x) for x in line.split()] for line in file]))
或者可以使用
islice
,减少计算负担:from itertools import islice
with open(filename,'r') as file:
col1,col2,col3 = islice(map(list,zip(*[[int(x) for x in line.split()] for line in file])),3)
关于python - 将数据保存在三个数组中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42654423/