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