嵌套循环,打印2维嵌套循环

时间:2014-11-04 01:16:30

标签: python

我遇到嵌套循环和列表的问题。我需要打印一个二维乘法表。

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%肯定如何做到这一点,我知道我需要使用循环,但我如何将垂直破折号放入?

1 个答案:

答案 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