Как печатать списки (разной длины, содержащие цветные символы) в виде столбцов в Python без использования импорта?

Я пытаюсь распечатать следующий треугольник, используя столбцы вместо строк:

def r(x):
    return '\x1b[6;31;50m{}\x1b[0m'.format(x)


def g(x):
    return '\x1b[1;32;50m{}\x1b[0m'.format(x)


def rb(x):
    return '\x1b[5;31;51m{}\x1b[0m'.format(x)


print(f'1    10    {rb(208)}    {r(1234)}')
print(5*' ', f'{g("1")}     {g("1")}{r("0")}     {g(208)}')
print(12*' ', f'1      {r("1")}0')
print(20*' ', f'{r(1)} ')

Если я хочу добавить столбец, как сейчас в коде, мне нужно добавить пробелы и один элемент в конец каждого оператора печати. Это не имеет большого значения для этого примера, но я не с нетерпением жду столбца 50 или 100. Я подумал, что вместо этого просто напишу каждый столбец в виде отдельного списка, а затем объединим их в список списков и прокручиваю его, но я застрял.

Печать одного списка в виде столбца с сохранением выравнивания была довольно простой, но я не знаю, как обрабатывать списки разной длины (интервал в порядке, но тот факт, что все списки будут иметь разную длину, меня достал).

col = ['32Σ21', '1234', '208', '10', '1']
col5color = ["33"+r("Σ2")+g("1"), g("12")+r("34"), r("2")+g("08"), rb("10"), r("1")]
maxlen = len(col[0])
for i in range(len(col)):
    print((maxlen - len(col[i]))*' ' + col5color[i])

Списки для первых четырех столбцов:

col4color = [r("1234"), g("208"), r("1") + "0", r("1")]
col3color = [rb("208"), g("1") + r("0"), "1"]
col2color = ["10", g("1")]
col1color = ["1"]

Чтобы уточнить: я не могу изменить макет (перевернуть строки/столбцы), я не могу использовать импорт, и мне нужно его жестко запрограммировать. Вот почему я хотел бы привести его в порядок и свести к минимуму риск ошибок. Если бы я мог просто иметь дело с разной длиной, мне нужно было бы добавить только один элемент в первый индекс «col», скопировать и вставить «col», изменить имя на «colncolor», а затем изменить цвета. Я мало что знаю о следующем столбце заранее, но я знаю, что новый элемент будет иметь не меньше символов, чем элемент в предыдущем столбце, поэтому мне никогда не придется менять «maxlen».

3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
0
0
21
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я решил это. Это не лучшее решение или универсальное, но, по крайней мере, это решение =)

def trimatrix_print(color_matrix, matrix, spacing=4):
    num_col = len(matrix)
    maxlen = len(matrix[0][0]) + spacing
    newmat = []
    for i in range(num_col):
        for j in range(num_col):
            if len(matrix[i]) < num_col:
                color_matrix[i].append(" ")
                matrix[i].append(" ")
            if len(matrix[i][j]) < maxlen and i != num_col - 1:
                color_matrix[i][j] = (maxlen - len(matrix[i][j]))*" " + color_matrix[i][j]
    for i in range(num_col):
        tempmat = []
        for j in range(1, num_col + 1):
            tempmat.append(color_matrix[-j][i])
        newmat.append(tempmat)
    for line in newmat:
        print(''.join(line))
    return


num = [
    ['32Σ21', '1234', '208', '10', '1'],
    ['1234', '208', '10', '1'],
    ['208', '10', '1'],
    ['10', '1'],
    ['1']]

colornum = [
    ["33"+r("Σ2")+g("1"), g("12")+r("34"), r("2")+g("08"), rb("10"), r("1")],
    [r("1234"), g("208"), r("1") + "0", r("1")],
    [rb("208"), g("1")+r("0"), "1"],
    ["10", g("1")],
    ["1"]]

trimatrix_print(colormat, mat)

Другие вопросы по теме