我有这个文件:

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它们lists,然后使用例如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/

10-12 18:48