如何在不使用导入的情况下将列表(包含彩色字符的不同长度)打印为 Python 中的列?

How to print lists (of different length containing colored characters) as columns in Python without using imports?

我正在尝试使用列而不是行打印出以下三角形:

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

澄清一下:我不能更改布局(翻转 rows/columns),我不能使用导入,我必须对其进行硬编码。这就是为什么我想整理一下并尽量减少出错的风险。如果我可以处理不同的长度,我只需要在“col”的第一个索引处添加一个元素,复制并粘贴“col”,将名称更改为“colncolor”,然后更改颜色。我事先对下一列了解不多,但我知道新元素的字符数至少与前一列中的元素一样多,所以我永远不必更改“maxlen”。

我解决了。这不是最佳解决方案或通用解决方案,但至少是一个解决方案 =)

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)