Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
连接矩阵PYTHON(无numpy)_Python_File_Matrix - Fatal编程技术网

连接矩阵PYTHON(无numpy)

连接矩阵PYTHON(无numpy),python,file,matrix,Python,File,Matrix,我要手动合并文本文件中包含的两个给定矩阵,而不导入任何类型的模块。它看起来像: [[1,2][3,4]],[[5,6,7],[8,9,10]] 我有以下代码: def combine(filename): with open(filename, 'r') as myfile: data=myfile.read().split() a=data[0].split() b=data[1].split() a=eval(a[0])

我要手动合并文本文件中包含的两个给定矩阵,而不导入任何类型的模块。它看起来像:

[[1,2][3,4]],[[5,6,7],[8,9,10]]
我有以下代码:

def combine(filename): 
    with open(filename, 'r') as myfile:
        data=myfile.read().split()
        a=data[0].split()
        b=data[1].split()
    a=eval(a[0])
    b=eval(b[0])
    row_a=len(a)
    row_b=len(b)
    col_a=len(a[0])
    col_b=len(b[0])
    concatenated=[]
    if row_a==row_b: #build horizontally 
        for i in range (row_a):
            concatenated.append(a[i])
            for i in range (row_b):
                concatenated.append(b[i])
        return concatenated
    if col_a==col_b: #build vertically
        for i in range (col_a):
            concatenated.append(a[i])
            for i in range (col_b):
                concatenated.append(b[i])
        return concatenated
    else:
        print ("Error")
但它的回报是:

[[1, 2], [5, 6, 7], [8, 9, 10], [3, 4], [5, 6, 7], [8, 9, 10]]
而不是:

[[1,2,5,6,7],[3,4,8,9,10]]

有什么办法可以让这一切顺利进行吗?提前谢谢你

您可以使用
ast.literal\u eval

import ast
final_results = [a+b for a, b in zip(*ast.literal_eval(open('filename.txt')))]
输出:

[[1, 2, 5, 6, 7], [3, 4, 8, 9, 10]]
编辑:没有任何导入,您可以使用
eval
。但是请注意,
eval
是非常不安全的,因此只能在来自可信源的字符串上运行:

final_results = [a+b for a, b in zip(*eval(open('filename.txt').read()))]

有没有不使用导入的方法来执行此操作?:)非常感谢。谢谢,如果我只是编辑我现有的代码,难道不可能在if语句下放置concatenated=[a+b]吗?@FatCat请将
concatenated
的内容发布在
if
语句下。你知道我为什么会得到TypeError:eval()arg 1必须是字符串,当我尝试执行此操作时是字节还是代码对象?@FatCat请查看我最近的编辑。现在应该可以了。