如何在同一行输出矩阵的for循环结果
如果我想在控制台上打印出两个矩阵相加后的结果,我该怎么把它们都打印在同一行上呢?
现在的代码是:
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]