2014-11-04 190 views
0

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

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

使用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