我遇到嵌套循环和列表的问题。我需要打印一个二维乘法表。
mult_table = [
[1, 2, 3],
[2, 4, 6],
[3, 6, 9]
]
print mult_table[0][0],mult_table[0][1],mult_table[0][2]
print mult_table[1][0],mult_table[1][1],mult_table[1][2]
print mult_table[2][0],mult_table[2][1],mult_table[2][2]
1 2 3
2 4 6
3 6 9
这就是我得到的,但这本书想要这个输出
1 | 2 | 3
2 | 4 | 6
3 | 6 | 9
我不是100%肯定如何做到这一点,我知道我需要使用循环,但我如何将垂直破折号放入?
答案 0 :(得分:1)
使用join
加入一系列字符串,并在它们之间加上一些文字:
mult_table = [
[1, 2, 3],
[2, 4, 6],
[3, 6, 9]
]
for row in mult_table:
print ' | '.join(str(x) for x in row)
输出:
1 | 2 | 3
2 | 4 | 6
3 | 6 | 9
然而,如果其中一个元素比一个字符宽,那将会失去它的美感。如果你知道最大宽度,你可以调整它看起来像这样:
mult_table = [
[1, 2, 3],
[2, 4, 6],
[3, 666, 9],
]
for row in mult_table:
print ' | '.join('{0:<4}'.format(x) for x in row)
输出:
1 | 2 | 3
2 | 4 | 6
3 | 666 | 9
为了非常灵活,我们可以计算数组中任何元素的最大宽度,并将其用作宽度。 str.rjust()
会将字符串右对齐到一定宽度。
mult_table = [
[1, 2, 3],
[2, 4, 6],
[3, 66666, 9],
]
maxval = max(max(mult_table))
maxwid = len(str(maxval))
for row in mult_table:
print ' | '.join(str(x).rjust(maxwid) for x in row)
输出:
1 | 2 | 3
2 | 4 | 6
3 | 66666 | 9