我知道有相关的主题,但是我进行了搜索,但没有一个主题帮助我。
我有一个带有方形矩阵的输入文本文件,如下所示:
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']
问题是我现在只用两个字符串而不是整数列表。
有什么建议吗?
答案 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在其评论中给出的方法是解决您的整体问题的更好方法。虽然将整个文件读到内存中并在星号上分割会比较容易,然后将每一行分割为整数。这样可以简化代码,但会占用更多内存。