首页 > 解决方案 > 使用 ANSI 格式代码在 python 中打印二维数组,而不迭代每个元素

问题描述

我正在编写程序,其中根据特定条件检查数组的每个字符元素。如果条件为 true ,则元素的格式应为粗体和颜色。

程序如下:

arr = [['F','O','R','S','T'],
       ['A','B','C','D','E'],
       ['M','N','P','Q','R']]

for row in arr:
    print (row)

for row in arr:
    for i in range(len(row)):
        #its just sample condition, actual condition would be different
        if row[i] == 'F' or row[i] == 'A' or row[i] == 'M': 
            row[i] = '\033[31m'+row[i]+'\x1b[0m'

print("\nUpdated Array: printed by iterating each element")
for row in arr:
    for column in row:
            print (column, end=" ")
    print("\n")

print("\nUpdated Array: printed without iterating each element")
for row in arr:
    print (row)

输出如下:

['F'、'O'、'R'、'S'、'T']

['A','B','C','D','E']

['M','N','P','Q','R']

更新数组:通过迭代每个元素打印

福斯特_

BCDE _

M NPQR

更新的数组:打印而不迭代每个元素

['\x1b[31mF\x1b[0m', 'O', 'R', 'S', 'T']

['\x1b[31mA\x1b[0m', 'B', 'C', 'D', 'E']

['\x1b[31mM\x1b[0m', 'N', 'P', 'Q', 'R']


有没有办法直接打印数组如下而不迭代数组

[ 'F','O','R','S','T']

[ 'A','B','C','D','E']

[ 'M','N','P','Q','R']

标签: pythonarraysansi

解决方案


您可以将数组设为单个字符串,然后打印字符串

new = ''
for row in arr:
    for col in row:
        #its just sample condition, actual condition would be different
        if col == 'F' or col == 'A' or col == 'M': 
         new += (' \033[31m'+ col +'\x1b[0m ')
        else:
          new+=(' '+ col)
    new+=('\n')     

然后打印new

输出:

 F O R S T
 A B C D E
 M N P Q R


推荐阅读