将文件输入到多个矩阵

时间:2019-01-20 23:27:35

标签: python list file matrix readline

我知道有相关的主题,但是我进行了搜索,但没有一个主题帮助我。

我有一个带有方形矩阵的输入文本文件,如下所示:

1 2 3
4 5 6
7 8 9
*
10 11 12 13 14
15 16 17 18 19
20 21 22 23 24
25 26 27 28 29
30 31 32 33 34

现在可以跟随更多的矩阵,它们之间都带有*

我想分离矩阵(不使用numpy!),然后使用列表中的list与它们一起使用(我想列表理解可能有用),所有条目都是整数。然后,第一个矩阵如下所示[[1,2,3],[4,5,6],[7,8,9]],第二个矩阵为[[10,11,12,13,14],[15,16,17,18,19],[20,21,22,23,24],[25,26,27,28,29],[31,31,32,33,34]],依此类推。

我的计划是将矩阵分成自己的列表条目,然后(使用矩阵为正方形的事实,因此可以轻松确定一个列表条目应包含多少个整数)使用一些列表理解来更改字符串转换成整数。但是我一开始就被困住了。

matrix = open('input.txt','r').read()
matrix = matrix.replace('\n',' ')
list = matrix.split('* ')

现在,如果我print list得到['1 2 3 4 5 6 7 8 9', '10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34']

问题是我现在只用两个字符串而不是整数列表。

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

mat_list = [[[int(num_str) for num_str in line.split()] for line in inner_mat.split('\n')] for inner_mat in open('input_mat.txt','r').read().split('\n*\n')]

[[[1、2、3],[4、5、6],[7、8、9]],[[10、11、12、13、14],[15、16、17, 18,19],[20,21,22,23,24],[25,26,27,28,29],[30,31,32,33,34]]]

答案 1 :(得分:0)

现在您有了字符串,请在空间上拆分每个字符串,并将每个小字符串转换为整数。之后,您可以将每个字符串列表转换为方形的“矩阵”(列表列表)。

另外一点:不要使用list作为变量名。这与内置的list类型冲突。在这段代码中,我使用了名称mylist

newlist = [[int(nstr) for nstr in v.split()] for v in mylist]
# Now convert each list of strings to a square "matrix" (list of lists)

但是,请注意@Selcuk在其评论中给出的方法是解决您的整体问题的更好方法。虽然将整个文件读到内存中并在星号上分割会比较容易,然后将每一行分割为整数。这样可以简化代码,但会占用更多内存。