печать 2-мерного массива в python с кодами форматирования ANSI без итерации каждого элемента - PullRequest
0 голосов
/ 05 февраля 2020

Я пишу программу, в которой каждый символьный элемент массива проверяется на соответствие определенному условию. Если условие истинно, элемент должен быть отформатирован жирным шрифтом и цветом.

Программа выглядит примерно так:

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 ']

Обновленный массив: печатается путем итерации каждого элемента

F ORST

A B C DE

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']

1 Ответ

0 голосов
/ 05 февраля 2020

Вы можете сделать массив как одну строку, а затем распечатать строку

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

...