如何在同一行输出矩阵的for循环结果

1 投票
2 回答
29 浏览
提问于 2025-04-13 03:03

如果我想在控制台上打印出两个矩阵相加后的结果,我该怎么把它们都打印在同一行上呢?

现在的代码是:

matrix1 = [[1, 2, 3],
           [3, 2, 1],
           [4, 5, 6]]

matrix2 = [[1, 1, 1],
           [1, 1, 1],
           [1, 1, 1]]

matrix3 = [[2, 3, 4],
           [4, 3, 2],
           [5, 6, 7]]

for row in matrix1: print(row)
print('    +')
for row in matrix2: print(row)
print('    =')
for row in matrix3: print(row)

DESIRED OUTPUT:
[1, 2, 3]      [1, 1, 1]    [2, 3, 4]
[1, 1, 1]  +   [1, 1, 1] =  [4, 3, 2]
[2, 3, 4]      [1, 1, 1]    [5, 6, 7]

说实话,我不太确定该从哪里开始。

2 个回答

0

这段代码会给你想要的输出结果。

for index, (row1, row2, row3) in enumerate(zip(matrix1, matrix2, matrix3)):
    print(row1, end="")
    print("\t" if index%2==0 else " + ", end="")
    print(row2, end="")
    print("\t" if index%2==0 else " = ", end="")
    print(row3)
1

这个解决方案可以很好地对齐矩阵,以便打印出来:

from itertools import zip_longest


def repr_2d_matrix(m):
    max_width = len(
        max(
            (str(v) for row in m for v in row),
            key=len,
        )
    )

    return [
        ("[" + ",".join(f"{v:>{max_width + 1}}" for v in row).strip() + "]")
        for row in m
    ]


def print_matrices(m1, m2, m3, symbol="+"):
    matrices = [repr_2d_matrix(m) for m in [matrix1, matrix2, matrix3]]
    symbol_pos = len(max(matrices, key=len)) // 2

    for line_no, line in enumerate(zip_longest(*matrices, fillvalue="")):
        if line_no == symbol_pos:
            print(f"{line[0]:<{len(matrices[0][0])}}", end="")
            print(f"  {symbol}  ", end="")
            print(f"{line[1]:<{len(matrices[1][0])}}", end="")
            print("  =  ", end="")
            print(f"{line[2]:<{len(matrices[2][0])}}")
        else:
            print(
                "     ".join(f"{l:<{len(matrices[i][0])}}" for i, l in enumerate(line))
            )


matrix1 = [[1, 2, 3], [3, 2, 1], [4, 5, 6]]
matrix2 = [[1, 1, 2], [1, 1, 3], [1, 1, 4]]
matrix3 = [[2, 3, 4, -88], [4, 3, 2, 9], [5, 6, 7, 10]]

print_matrices(matrix1, matrix2, matrix3)

打印结果:

[1, 2, 3]     [1, 1, 2]     [2,   3,   4, -88]
[3, 2, 1]  +  [1, 1, 3]  =  [4,   3,   2,   9]
[4, 5, 6]     [1, 1, 4]     [5,   6,   7,  10]

matrix1 = [[1, 2, 3], [3, 2, 1], [4, 5, 6]]
matrix2 = [[1, 1], [1, 1], [1, 1], [2, 3], [4, 5]]
matrix3 = [[2, 3, -1], [4, -3, 2], [5, 6, 7]]

print_matrices(matrix1, matrix2, matrix3)

打印结果:

[1, 2, 3]     [1, 1]     [2,  3, -1]
[3, 2, 1]     [1, 1]     [4, -3,  2]
[4, 5, 6]  +  [1, 1]  =  [5,  6,  7]
              [2, 3]                
              [4, 5]                

撰写回答