如果沒有一行的限制,通常代碼可以這樣寫:
1 for x in range(1,10): 2 for y in range(1, x+1): 3 print("%s*%s=%s"%(y, x, x*y), end="\t") 4 print()
寫在一行的代碼如下:
print("\n".join("\t".join(["%s*%s=%s"%(y, x, x*y) for y in range(1, x+1)]) for x in range(1, 10)))
簡單分析一下這行代碼,按照執行順序先拆出下面這一句:
- "\t".join(["%s*%s=%s"%(y, x, x*y) for y in range(1, x+1)]) 很明顯這句是一個將以推導式的形式生成的列表轉換成字符串,以制表符分隔;單獨這一句代碼不能執行,因為x還未賦值,我們可以假設它有一個值,你會發現這一行代碼最終結果是打印99乘法表的每一行。
- 然后剩下的代碼則是外層循環,列表推導式,轉換字符串,以換行符分隔,跟第1步一樣(上面外層的join操作對象並沒有再使用[ ]轉成列表,加上也可以)。
最后結果:
1 1*1=1 2 1*2=2 2*2=4 3 1*3=3 2*3=6 3*3=9 4 1*4=4 2*4=8 3*4=12 4*4=16 5 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 6 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 7 1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 8 1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 9 1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81