如何在不使用导入的情况下将列表(包含彩色字符的不同长度)打印为 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)
我正在尝试使用列而不是行打印出以下三角形:
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)