python3.x使用format()打印列表的每个值

python3.x使用format()打印列表的每个值,python,python-3.x,formatting,Python,Python 3.x,Formatting,我对python 3.6中的.format()函数有一个问题: 基本上,我有一个值列表(val_output_list),它已经按正确的顺序排列,然后我想打印出来,格式如下,其中V是列表的值: +-------+-------+-------+ | V V V | V V V | V V V | | V V V | V V V | V V V | | V V V | V V V | V V V | +-------+-------+-------+ | V V V | V V V | V V V

我对python 3.6中的
.format()
函数有一个问题:

基本上,我有一个值列表(val_output_list),它已经按正确的顺序排列,然后我想打印出来,格式如下,其中V是列表的值:

+-------+-------+-------+
| V V V | V V V | V V V |
| V V V | V V V | V V V |
| V V V | V V V | V V V |
+-------+-------+-------+
| V V V | V V V | V V V |
| V V V | V V V | V V V |
| V V V | V V V | V V V |
+-------+-------+-------+
| V V V | V V V | V V V |
| V V V | V V V | V V V |
| V V V | V V V | V V V |
+-------+-------+-------+
val_输出_列表的输入为:

val_output_list = [6, 1, 4, 2, 3, 9, 8, 7, 5, 3, 8, 2, 5, 7, 6, 1, 9, 4, 9, 5, 7, 8, 1, 4, 3, 6, 2, 5, 7, 1, 3, 8, 2, 9, 4, 6, 8, 4, 6, 7, 9, 1, 5, 2, 3, 2, 3, 9, 6, 4, 5, 7, 8, 1, 1, 9, 5, 4, 6, 8, 2, 3, 7, 4, 2, 3, 9, 5, 7, 6, 1, 8, 7, 6, 8, 1, 2, 3, 4, 5, 9]
到目前为止,我编写的代码如下:

print("+-------+-------+-------+\n")
for index, value in enumerate(val_output_list):
    print(("|" + " {} {} {} |"*2 + "{} {} {} |\n").format(val_output_list[value]))
    if index + 1 == 28:
        print("+-------+-------+-------+\n")
    elif index + 1 == 55:
        print("+-------+-------+-------+\n")
    elif index + 1 == 82:
        print("+-------+-------+-------+\n")
其背后的想法是,我枚举列表中的值,并使用索引确定是否必须打印分隔行。 然后我遍历值列表并打印占位符所在的值。 然而,我得到了一个我不明白的解释

print(("|" + " {} {} {} |"*2 + "{} {} {} |\n").format(val_output_list[value]))
IndexError: tuple index out of range
您可以使用以下选项:

matrix = [ str(r)+str(c) for r in range(9) for c in range(9)]

row_pattern = "| {} {} {} | {} {} {} | {} {} {} |"
row_len = len(row_pattern)  
row_line = "-" * row_len 
rp = row_pattern + "\n"
rl = row_line + "\n"

# build the full pattern
full_pattern = rl + rp * 3 + rl + rp * 3 + rl + rp * 3 + rl

print(full_pattern.format(*matrix))
输出:

----------------------------------
| 00 01 02 | 03 04 05 | 06 07 08 |
| 10 11 12 | 13 14 15 | 16 17 18 |
| 20 21 22 | 23 24 25 | 26 27 28 |
----------------------------------
| 30 31 32 | 33 34 35 | 36 37 38 |
| 40 41 42 | 43 44 45 | 46 47 48 |
| 50 51 52 | 53 54 55 | 56 57 58 |
----------------------------------
| 60 61 62 | 63 64 65 | 66 67 68 |
| 70 71 72 | 73 74 75 | 76 77 78 |
| 80 81 82 | 83 84 85 | 86 87 88 |
----------------------------------
矩阵
如下所示:

['00', '01', '02', '03', '04', '05', '06', '07', '08', 
 '10', '11', '12', '13', '14', '15', '16', '17', '18', 
 '20', '21', '22', '23', '24', '25', '26', '27', '28', 
 '30', '31', '32', '33', '34', '35', '36', '37', '38', 
 '40', '41', '42', '43', '44', '45', '46', '47', '48', 
 '50', '51', '52', '53', '54', '55', '56', '57', '58', 
 '60', '61', '62', '63', '64', '65', '66', '67', '68', 
 '70', '71', '72', '73', '74', '75', '76', '77', '78', 
 '80', '81', '82', '83', '84', '85', '86', '87', '88']
如果有行列表,可以使用列表解包:

matrix = [ [str(r)+str(c) for r in range(9)] for c in range(9)]

print(full_pattern.format(*(x for y in matrix for x in y)))
对于
矩阵
的外观:

[['00', '10', '20', '30', '40', '50', '60', '70', '80'], 
 ['01', '11', '21', '31', '41', '51', '61', '71', '81'], 
 ['02', '12', '22', '32', '42', '52', '62', '72', '82'], 
 ['03', '13', '23', '33', '43', '53', '63', '73', '83'], 
 ['04', '14', '24', '34', '44', '54', '64', '74', '84'], 
 ['05', '15', '25', '35', '45', '55', '65', '75', '85'], 
 ['06', '16', '26', '36', '46', '56', '66', '76', '86'], 
 ['07', '17', '27', '37', '47', '57', '67', '77', '87'], 
 ['08', '18', '28', '38', '48', '58', '68', '78', '88']]

你能给我们看一下
val\u output\u list
value
不是已经是
val\u output\u list
的一个元素了吗?在我看来,
val\u output\u list[value]
应该是
value
。另外,它应该是
V1 V2 V3 | V4 V5…
还是
V1 V2 V3 | V10 V11…
?也就是说,是先填充行还是先填充内格?当您得到“元组索引超出范围”时,打印您试图格式化的变量。在这里发布一个问题之前,需要最少的研究工作。@Aaron我试过了,但是我得到了同样的例外